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.
Este comentário foi removido pelo autor.
ResponderExcluirbom 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