5
respostas

Autenticação com JWT no servidor

Boa noite, como faço para implementar a autenticação com JWT na minha API rest em Java, com login e senha sendo validados no banco?

5 respostas

Michael, tudo bem ?

Acredito que no curso seja mostrado isso, mas de qualquer forma, tem um tutorial que usei a pouco tempo que me ajudou : https://stormpath.com/blog/jwt-java-create-verify

Dá uma olhadinha :D

Fala Michael, tudo bem ?

Então .. o conceito do JSON Web Tokens (jwt) é trafegar justamente nesse formato informações tokens contendo informações entre apps clientes e servidoras. Visto isso poderia ser implementado seguindo somente o que a espec propicia.

Em geral você vai precisar ter filtros na sua api responsáveis por interceptar suas requisições e buscar sempre pelas informações, seja ela vinda de um header http, enviada através de cookies, ou parâmetros de requisição, bem como gerar os tokens quando seus usuários se autenticarem. O grande trabalho fica por conta de implementar na mão toda essa camada de segurança seguindo esse padrão, ou da integração dessa implementação junto ao framework de segurança que estiver utilizando (Spring Security, JAAS, etc).

Pensando nisso os frameworks estão trazendo algum suporte à respeito. Tem um post de exemplo bem bacana explicando como usar com spring secutiy aqui. Existem algumas outras implementações prontas de terceiros rodando nos blogs da comunidade (como esse exemplo), dá uma olhada se precisar de algo diferente.

Espero ter ajudado. Abraço!

Boa tarde Matheus,

Desculpe a demora em responder, eu vi que tem 2 métodos, um que cria e outro que verifica, mas não sei como implementar isso acessando minha base e verificando se o usuário existe e quais são as funcionalidades que pode acessar... Tem alguma ideia? Ainda estou bastante confuso!

Fala Rafael Rollon, blz?

Então, o spring security também serve para APIs rest?

Fala Michael,

Opa funciona sim! Ele vai continuar aplicando o mesmo filtro de segurança padrão do framework, pra garantir a mesma forma de desenvolvimento internamente. Mas você pode, por exemplo, na configuração de segurança adicionar filtros na cadeia do security e ele já vai aplicar os mesmos para você. Assim você poderia ter sua implementação com JWT sendo aproveitada pelo framework.

@Override
protected void configure(HttpSecurity http) throws Exception {

        StatelessLoginFilter statelessLoginFilter = new StatelessLoginFilter("/api/login" ....);

        StatelessJWTAuthenticationFilter statelessAuthenticationFilter = 
                new StatelessJWTAuthenticationFilter( ... );

        http.authorizeRequests()
            .antMatchers("/**").permitAll()
            //seus matchers
            .anyRequest().authenticated()

            .and()
            .csrf().disable()

            //adicionando filtros na chain do spring security
            //serão inseridos antes do UsernamePasswordAuthenticationFilter do framework
            .addFilterBefore(statelessLoginFilter, UsernamePasswordAuthenticationFilter.class)        
            .addFilterBefore(statelessAuthenticationFilter, UsernamePasswordAuthenticationFilter.class);
    }