OAuth2 com Spring Boot 2 e Spring 5

Nataniel Paiva
CWI Software
Published in
3 min readMay 21, 2019

--

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:

Body da requisição de autenticação
Basic Auth

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:

Passando um access_token em um endpoint seguro

Se você não passar o access_token a mensagem será a seguinte:

Acessar o endpoint sem token

--

--

Nataniel Paiva
CWI Software

Líder de Engenharia na CWI Software que ama programar e aprender novas tecnologias! Já usei Angular, Laravel, Spring Boot, React Native, Python, Go e etc...