OAuth2 com Spring Boot 2 e Spring 5
E aí galera! Hoje decidi escrever sobre autenticação e autorização. Nesse tutorial vou mostrar como se faz uma simples autenticação e autorização via Rest utilizando o Spring Boot.
Bom, então vamos lá baixar o nosso projeto no Spring Initializr:
Após baixar o projeto, vamos colocar no pom.xml as dependências do Spring Boot, JPA, Security, OAuth2 e Lombok(lembrando que para utilizar o Lombok é necessário você instalar um plugin para compilar o seu código, veja o plugin do IntelliJ em https://projectlombok.org/setup/intellij). O nosso pom.xml ficará assim:
Em nossas configurações no application.properties vamos colocar o banco H2, tipo de criptografia de senha chamada de Bcrypt e o servidor para rodar na porta 5000.
Agora vamos criar as nossas entidades, tanto a de perfil quanto a de usuário. Para a de perfil vamos criar a Role.java e na sequência criar a User.java.
Agora vamos criar as interfaces para o Spring Data JPA Repositories. São interfaces simples tanto para User, quanto para Role.
Com as interfaces criadas, vamos criar uma classe para inserir dados iniciais chamada DataInitializr.java e também uma constante para deixar em um local fixo os perfis necessários para a autorização com o Spring Security:
Agora que já temos os primeiros usuários, vamos as configurações de Autenticação, primeiro vamos criar a service MyUserDetailsService.java para determinar como será a nossa autenticação.
Agora vamos para a classe WebSecurityConfiguration.java
E enfim a classe OAuth2ServerConfiguration.java
Agora para completar vamos para a nossa controller UserController.java, lembrando que ainda deixei um dos endpoints paginados.
Agora para finalizar vamos criar a classe SecurityController.java para um endpoint de recuperação do usuário logado.
Para rodar o projeto basta executar o spring-boot:run em seu terminal e pronto, acessar o endereço http://localhost:5000. Para logar você utilizará:
- http://localhost:5000/oauth/token
- Parâmetros no Body: grant_type=password, username=admin e password=123456
- Parâmetro de Basic Auth: username=client, password=123(esses são os client_id e secret_id)
Seguem duas imagens do Postman para que vejam como ficará a requisição de autenticação:
Lembre-se de enviar a requisição com todos esses parâmetros para que possa recuperar o token, após isso basta pegar o access_token e acessar o endpoint de usuário logado da seguinte forma:
Se você não passar o access_token a mensagem será a seguinte:
Está aí o tutorial, espero ter ajudado alguém! Os códigos do projeto estão em:
Valeu galera! Até o próximo tutorial!