Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

autenticarCliente(token)

1) O método autenticarCliente(token) poderia ficar em TokenService? Assim não precisaria injetar mais um objeto no SecurityConfiguration.

2) Em meu código previ a inexistência do usuário. Neste caso, como eu não vou setar o token, a requisição irá retornar um 403 ou tenho que retornar um boolean e tratar no filter?

public void autenticarCliente(String token) {
          Long idUsuario = tokenService.getIdUsuario(token);
          Optional<Usuario> usuario = repoUsuario.findById(idUsuario);
          if(usuario.IsPresent()) {
              UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(Usuario, null, usuario.get().getAuthorities());
              SecurityContextHolder.getContext().setAuthentication(authentication);
          }
     }
5 respostas

Oi Dirley,

1) Eu não acho legal colocar o método autenticarCliente na classe TokenService, pois o objetivo dela deveria ser apenas a geração/validação de tokens e não a parte de autenticação em si no Spring Security.

2) Isso significa que sua api é totalmente pública e não existe autenticação/autorização nela? Nesse caso basta dar permitAll em todas as urls e não precisa da geração de tokens.

Bons estudos!

2) Não, Rodrigo. Entre o login e a expiração do Token, o usuário foi bloqueado ou até excluído (improvável), mas pode ocorrer. Neste caso, tal usuário deixaria de existir.

solução!

Ah sim,

Nesse caso o token precisaria ser marcado como inválido no momento que o usuário for bloqueado.

Mas a lib que usamos no curso não suporta tal funcionalidade. Você vai precisar implementar uma lógica que controla quais tokens estão inválidos e bloquear as requisições que chegarem utilizando algum deles.

Ou então utilizar algum protocolo mais "avançado", como o OAuth, cujo o Spring tem um módulo para integração.

Bons estudos!

Existe algum curso recente de OAuth no alura?

Infelizmente curso específico de OAuth ainda não temos.