quarta-feira, 6 de fevereiro de 2019

Spring Security Oauth2 com Ldap - Authorization Server

Vou demonstrar neste post, como configurar o Spring Security Oauth2 com o LDAP (Veja como configurar o OpenLDAP aqui), neste post vamos configurar somente o Authorization Server.

Temos a opção do inMemory para o controle do client e token, mas vou demonstrar utilizando este controle com base de dados.

Rode o script OAUTH2_SPRING_SEC.sql no Oracle XE, e terá as seguintes tabelas geradas.


Faça um select na tabela OAUTH_CLIENT_DETAILS e vai ter o clientId para test.


Vamos a configuração do projeto. Crie um projeto, e no pom.xml acrescente as seguintes dependências:


A lib do ojdbc pode ser baixada em link. e para configurar a lib execute:

mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0 -Dpackaging=jar -Dfile=ojdbc7.jar

Agora vamos as classe de configuração:

Crie uma classe para as configurações de base de dados, ex.: JdbcConfiguration


Crie uma classe que vai estender a classe AuthorizationServerConfigurerAdapter e iremos sobrescrever os 3 métodos configure. Nestes métodos estarão as configurações necessárias para a validação do token, clientId e do usuário logado. Ex.: AuthorizationServerConfiguration

Acrescente a notação @EnableAuthorizationServer para habilitar o Authorization Server no contexto da aplicação.


Observe que utilizamos os beans DataSource e o TokenStore configurados na classe JdbcConfiguration.

Crie uma classe que vai estender a classe WebSecurityConfigurerAdapter e iremos sobrescrever 4 métodos. Ex.: ServerSecurityConfiguration

O primeiro método a ser sobrescrito vai conter as regras para HTTP Security.


O segundo método a ser sobrescrito contem as regras para a autenticação do usuário no ldap.


O terceiro método a ser sobrescrito serve para retornar o bean UserDetailsService que é utilizado na classe AuthorizationServerConfiguration.


E o quarto método a ser sobrescrito serve para retornar o bean AuthenticationManager que é utilizado na classe AuthorizationServerConfiguration.


Agora vamos aos métodos necessários para o correto funcionamento com o Ldap. O método abaixo irá preencher o atributo "authorities" com os grupos que o usuário  é membro.


O método abaixo, utilizado para a conexão com o Ldap.


Testando:
/oauth/token
grant_type: password



/oauth/check_token

/oauth/token
grant_type: refresh_token


Log:

Validação do clientId na base de dados:


Autenticação do usuário no Ldap.


O projeto deste post está no meu github link.

2 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. bom dia. Baixei seu código, mas o login só funciona por meio do form, tentei no postman e sempre da 401. Pode me ajudar? Se puder me mandar um exemplo de requisição usando postman, pode me ajudar muito.

    ResponderExcluir