Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Autenticação com Spring Security

Olá,

eu entendi que para configurar as rotas da nossa aplicação com spring security devemos definir uma classe que esteja anotada com @EnableWebSecurity e extender da classe WebSecurityConfigurerAdapter, e criar um método configure que tem como parâmetro HttpSecurity e dentro desse método definios as permissões.

Ok, até aí tudo bem.

Mas temos outro método configure que recebe como parâmetro um AuthenticationManagerBuilder, e é neste ponto que começa minhas duvidas, o método foi feito, mas eu não entendi como ele funciona, o que ele faz. segue o método :

@Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(usuarioDao)
        .passwordEncoder(new BCryptPasswordEncoder());
    }

O que esse método está fazendo ? como ele realiza a autenticação, como o spring após isso faz a verificação de que estou autenticado ou não estou ? onde é que o spring guarda essa informação de que estou autenticado ? alguém pode me explicar melhor o que acontece nesse processo ?

A outra dúvida é :

Em um cenário que eu tenha uma API Rest, onde a mesma sirva a varios projetos diferentes, não faz muito sentido eu ser autenticado por uma tela de login da API Rest, então como seria feita essa autenticação ? como seria feita a autenticação e como saberia que o usuario que está mandando uma requisição está autenticado ?

1 resposta
solução!

Oi Lúcio, tudo bem?

Nós podemos personalizar a autenticação expondo um UserDetailsService customizado. Por exemplo, esse método configure basicamente recebe via parâmetros um AuthenticationManagerBuilder(o próprio Spring Security passa essa variável) e o conteúdo desse método personaliza a autenticação falando qual a classe da nossa aplicação deve ser utilizada para buscar as informações do usuário. O spring security utiliza Session para saber que um usuário está autenticado: https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#ns-session-mgmt