quinta-feira, 7 de fevereiro de 2019

Spring Security Oauth2 com Ldap - Resource Server

No post anterior (link), criamos o projeto para a geração dos token com o Spring Security Oauth2. Agora vamos criar o projeto que irá conter um Controller restringindo na operação "/test" somente usuários que tiver a role ROLE_DEVELOPERS.

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


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


Crie uma classe que vai estender a classe ResourceServerConfigurerAdapter e iremos sobrescrever os 2 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 e as regras do HTTP Security. Ex.: AuthorizationClientConfiguration

Acrescente a notação @EnableResourceServer para habilitar o filtro Spring Security que autentique as request por meio do token do Oauth2.


Observe que utilizamos o bean TokenStore configurado na classe JdbcConfiguration.

Crie uma classe que vai estender a classe GlobalMethodSecurityConfiguration e iremos sobrescrever 1 método. Ex.: MethodSecurityConfiguration

Acrescente a notação @EnableGlobalMethodSecurity para habilitar a segurança do método global Spring Security.


Crie uma classe que vai implementar a classe WebMvcConfigurer. Ex.: ResourceServerWebConfiguration

Acrescente a notação @EnableWebSecurity para ter as configurações do Spring Security.


Agora vamos criar o Controller, crie uma classe ex.: TestController, acrescente a notação @Controller. E crie um método conforme o exemplo. O ponto principal é a notação @PreAuthorize, onde definimos os scopes e roles que terão permissão de execução.


Vamos ao testes.
User: developer

Gerando um token:


Executando o método /test


User: tester


Executando o método /test e acesso negado:


Log:

O projeto deste post está no meu github link.

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.

domingo, 3 de fevereiro de 2019

Instalando o OpenLDAP no Ubuntu

Neste post, vamos instalar o OpenLDAP no Ubuntu.

Com ele conseguimos executar testes locais com o Weblogic, Java ou qualquer outra aplicação que necessite de autenticação usando Active Diretory.

No momento da instalação, a versão do OpenLDAP é a 2.4.47. link

Precisamos baixar o Berkley DB, baixe a versão 5.3.28. link

Instalação:

Berkley DB:

Descompacte o arquivo e acesse o dir "build_unix"

execute o comando abaixo:

../dist/configure

Ao termino da execução execute:

sudo make install


OpenLDAP:

Descompacte o arquivo e acesse o dir.

Execute o comando abaixo:

export CPPFLAGS="-I/usr/local/BerkeleyDB.5.3/include/"
./configure


Execute o comando abaixo:

make depend

Execute o comando abaixo:

make

Execute o comando abaixo (o processo de test demora):

make test


Execute o comando abaixo:

sudo make install


Alterar o arquivo de configuração, execute:

sudo vim /usr/local/etc/openldap/slapd.ldif

DE:

PARA:

Importando a configuração para a base de dados, execute:

sudo mkdir /usr/local/etc/slapd.d
sudo /usr/local/sbin/slapadd -n 0 -F /usr/local/etc/slapd.d -l /usr/local/etc/openldap/slapd.ldif



Agora vamos inicializar o SLAPD, execute:

sudo /usr/local/libexec/slapd -F /usr/local/etc/slapd.d

Para checar se foi inicializado, execute o comando:

ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts


Vamos agora acrescentar uma entrada, execute:

vim ~/minhaempresa.ldif

E acrescente o conteúdo (certifique-se que não haja espaço em branco no fim de cada linha):

dn: dc=leonardosugahara,dc=com,dc=br
objectclass: dcObject
objectclass: organization
o: Minha Empresa
dc: leonardosugahara

dn: cn=Manager,dc=leonardosugahara,dc=com,dc=br
objectclass: organizationalRole
cn: Manager

Vamos importa o arquivo, execute o comando:

ldapadd -x -D "cn=Manager,dc=leonardosugahara,dc=com,dc=br" -w secret -f minhaempresa.ldif


Para verificar se funcionou, execute uma pesquisa com o comando:

ldapsearch -x -b 'dc=leonardosugahara,dc=com,dc=br' '(objectclass=*)'



Existem ferramentas para nos auxiliar a navegar, fazer pesquisas e manutenção de informações no OpenLDAP, vamos utilizar como exemplo o Apache Directory Studio. link

Execute o comando:

sudo apt-get install ldap-utils

Descompacte o arquivo, e execute o arquivo ApacheDirectoryStudio

./ApacheDirectoryStudio

Para criar uma conexão com o OpenLDAP, vá em "LDAP" -> "New Connection" e preencha com as seguintes informações:

Connection Name: OpenLDAP
Hostname: localhost



Click em "Next", selecione "Simple Authentication" e preencha os campos com:

Bind DN or user: cn=Manager,dc=leonardosugahara,dc=com,dc=br
Bind password: secret

Conectado:


Baixe o arquivo userAndGroup.ldif, e abra no Apache Directory Studio, e click na seta verde para executar, será criado os grupos e usuários.