Login com Oauth2 usando o spring security

Odilio Noronha
RapaduraTech
Published in
3 min readSep 21, 2020

OAuth2 é um padrão de autenticação amplamente utilizado, que permite que sua aplicação se autentique mas não manipule diretamente nomes de usuários e senhas. Empresas como Google, Facebook e Twitter já utilizam esse padrão para prover o acesso à seus recursos de forma segura à aplicações de terceiros. Nesse caso você terceiriza a segurança dos dados do usuário a sistemas que já os possuem e gerenciam.

Obtendo as suas credenciais

Para obter as credenciais do cliente para autenticação Google OAuth2, vá para o Console de API do Google — seção “Credenciais”.

Aqui, criaremos credenciais do tipo “OAuth2 Client ID” para nosso aplicativo. Isso faz com que o Google configure um ID de cliente e segredo para nós.

Também temos que configurar um URI de redirecionamento autorizado no Google Console, que é o caminho para o qual os usuários serão redirecionados depois de fazerem login com o Google.

Para obter as credenciais do cliente para autenticação com o Facebook, precisamos registrar um aplicativo no site Facebook for Developers e configurar o URI correspondente como um “URI de redirecionamento OAuth válido”.

Dependências do Maven

Além das dependências Spring e Spring Security padrão, também precisaremos adicionar as dependências spring-security-oauth2-client e spring-security-oauth2-jose:

A primeira dependência é o client para o oauth 2 e a segunda é o José, conhecido porteiro e segurança do escritório de Rod Johnson, criador do spring, isso ou vem de (Javascript Object Signing and Encryption) que provem métodos para transferir seguramente.

  • JSON Web Token (JWT)
  • JSON Web Signature (JWS)
  • JSON Web Encryption (JWE)
  • JSON Web Key (JWK)

Configurações do nosso application.properties

Aqui colocamos o id e o secret que obtemos anteriormente, segue um exemplo mas pode não funcionar no momento do teste, o ideal é que já crie e teste suas credenciais.

Vamos ao código

A configuração automática do web security é equivalente a definir um elemento oauth2Login () simples:

Aqui, podemos ver que o elemento oauth2Login () é usado de maneira semelhante aos elementos httpBasic () e formLogin () já conhecidos.

  1. Ele cria um WebSecurityConfigurerAdapter, que protege todos os restful endpoints.
  2. Ele registra um ClientRegistrationRepository, usando seu serviço / repositório na memória. Isso significa que o aplicativo armazenará todos os dados do usuário na memória, uma vez conectado.
  3. Ele fornece o Client Registration. Usando a chave de API e o segredo de API de nossa conta do Google Cloud ou facebook developer, podemos atualizar as variáveis ​. Essa DSL também configura escopos, que solicitaremos do Google, mas o usuário deve aprovar os escopos para nos dar acesso às informações de seu perfil.

Aqui, configuramos nosso URL de login como / oauth_login.

A seguir, vamos definir um LoginController com um método que mapeia para essa URL:

No controller nos utilizamos o OAuth2AuthorizedClientService para carregar os clients de autorização e então finalmente o redirecionamos para nossa página oauth_login.html, vamos criar ela agora utilizando thymeleaf.

Aqui para cada client registrado nos criamos uma linha com o valor e a chave do client, no caso temos o google e o facebook como clients, a tela deverá ficar mais ou menos como essa, estou usando bootstrap pra dar alguma estilizada de leve.

Você é redirecionado para a pagina de autorização do client, como ocorre em outras páginas, e se tudo correr bem, irá conseguir acessar a página de sucesso de nosso controller.

Podemos pegar os atributos através do restTemplate e enviar para a nossa tela de sucesso, que ficará mais ou menos assim.

Hoje, este artigo mostrou como colocar em funcionamento o Spring Security 5 OAuth2 rapidamente. O aplicativo se integra ao Google para permitir autenticação segura e consentimento de usuários com uma conta Google. A API de aplicativos foi protegida usando um token de sessão que é gerado usando as bibliotecas Spring Security 5.4 OAuth2.

Espero que tenha sido útil para alguém e aqui segue o código completo deste exemplo https://github.com/Odilio/oauth2-spring

--

--