1. Resumo
Este tutorial apresenta um passo a passo prático para a instalação e testes do Keycloak 1.5.0.Final.
Os procedimentos descritos aqui podem ser realizados num ambiente Linux, OS X ou Windows mas, nesse último caso, você precisará instalar o Cygwin para não precisar fazer nenhuma adaptação nos comandos apresentados. A instalalação do Cygwin para a execução deste tutorial deve ser realizada conforme os passos descritos na página instalacao-cygwin.asciidoc
2. Pré-requisitos
Para executar os passos deste tutorial você precisará ter instalado em tua máquina:
-
O JDK (este tutorial foi testado com a versão 1.8.0_60);
-
O Maven (este tutorial foi testado com a versão 3.3.3);
|
Note
|
A montagem de um ambiente Java EE pode ser realizada rapidamente no Linux, no OS X ou no Windows (+ Cygwin), através do projeto javaee-ambiente. |
3. Baixando e iniciando o Keycloak para a execução de aplicações de demonstração
Uma forma fácil de testar e aprender os conceitos do Keycloak é baixando o instalador de desenvolvimento (arquivo keycloak-demo-1.5.0.Final.tar.gz). Esse arquivo contém parte dos arquivos necessários para a execução dos exemplos deste tutorial. Isso inclui um servidor Wildfly 9.0.1.Final com o servidor Keycloak e seus adaptadores já configurados.
|
Note
|
Se você montou teu ambiente através do projeto javaee-ambiente o download e a descompactação do instalador de desenvolvimento do keycloak podem ser realizados pelo comando |
Descompacte esse arquivo. Você pode utilizar o comando abaixo:
tar xvfz keycloak-demo-1.5.0.Final.tar.gz
Ajuste o valor da variável JBOSS_HOME da seguinte forma:
export JBOSS_HOME=$PWD/keycloak-demo-1.5.0.Final/keycloak
Inicie o Keycloak com o seguinte comando:
$JBOSS_HOME/bin/standalone.sh &
4. Testando alguns exemplos
4.1. Os exemplos "pré-configurados"
Vá para o diretório $JBOSS_HOME/../examples/preconfigured-demo e leia o arquivo README.md. Os passos descritos a seguir são uma simplificação dos passos apresentados nele.
cd $JBOSS_HOME/../examples/preconfigured-demo
view README.md
4.1.1. Importando o realm dos exemplos
Logue-se com o usuário admin e a senha admin. Será solicitada a troca da senha.
Clique em Select file e selecione o arquivo testrealm.json que está dentro do diretório em que você está. Em seguida, clique no botão Upload.
4.1.2. Compilando e implantando os exemplos
Abra um shell que contenha o Maven no PATH. Compile e implante os exemplos com os comandos a seguir. Observe o log do Wildfly enquanto o último comando é executado para averiguar a implantação dos exemplos.
mvn clean install
mvn wildfly:deploy
4.1.3. Testando, manualmente, os exemplos customer-portal e product-portal
Acesse a URL http://localhost:8080/customer-portal/. Clique em Customer Listing e você será redirecionado para a página de autenticação no Keycloak. Informe o usuário (bburke@redhat.com) e a senha (password).
Observe o log do Wildfly.
Observe a tela que será apresentada. Note o valor de Servlet User Principal.
Clique em products. Observe que não foi solicitada nova autenticacão apesar do contexto ter sido alterado para product-portal (esta app também utiliza os mecanismos de segurança do Java EE).
Clique em Product Listing. Note que o valor do User é o mesmo que o apresentado na tela customers para o campo Servlet User Principal.
Retorne a tela anterior e clique em Admin Interface (URL: http://localhost:8080/product-portal/admin/admin.jsp). Note que será exibida a mensagem Forbidden. Isso ocorre pelo fato do usuário logado (bburke@redhat.com) não ter o perfil admin (exigido para esse acesso). Podemos saber disso observando dois arquivos: o primeiro deles é o web.xml que, conforme a saída do comando abaixo, exige que o usuário logado tenha o perfil admin para acessar qualquer URL abaixo de /admin/:
$ sed -n 9,17p product-app/src/main/webapp/WEB-INF/web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>Admins</web-resource-name>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
</auth-constraint>
</security-constraint>
O segundo arquivo é o testrealm.json. As configurações para o usuário bburke@redhat.com são apresentadas na saída do comando a seguir:
$ sed -n 15,29p testrealm.json
{
"username" : "bburke@redhat.com",
"enabled": true,
"email" : "bburke@redhat.com",
"firstName": "Bill",
"lastName": "Burke",
"credentials" : [
{ "type" : "password",
"value" : "password" }
],
"realmRoles": [ "user" ],
"clientRoles": {
"account": [ "manage-account" ]
}
},
Notamos que, nessa saída, o usuário em questão não possui a role admin (as roles que ele possui estão definidas para o valor de realmRoles).
Retorne a URL http://localhost:8080/customer-portal/customers/view.jsp.
Clique em manage.acct. Navegue pelos links.
Em Account edite os campos Email, Fist name e Last name informando teus próprios dados e clique em Save.
Em Password, altere a senha e clique em Save.
Em Sessions, clique em Log out all sessions.
Efetue o Log in informando teu email e senha. Após o logon, note que o Username permanece bburke@redhat.com.
Observe o log do Wildfly.
4.1.4. Uma aplicação escrita puramente em Javascript: customer-portal-js
Em Applications clique em customer-portal-js. Em seguida, em Customer Listing. Note a alteração do valor dos campos Email e Full Name, Fist e Last, conforme os dados que você editou no passo anterior.
A aplicação http://localhost:8080/customer-portal-js é uma aplicação totalmente escrita em Javascript. Para ver sua estrutura, sem os arquivos gerados na contrução da aplicação, execute:
$ (cd customer-app-js; mvn clean)
$ tree customer-app-js/
customer-app-js/
|-- pom.xml
`-- src
`-- main
`-- webapp
|-- customers
| `-- view.html
|-- index.html
`-- keycloak.json
4 directories, 4 files
Clique em logout.
4.1.5. Gerenciando a conta do usuário logado
Efetue o Log in informando admin e password.
Clique em products e, em seguida, em Admin Interface. Note que, agora, o acesso a tela de administração não exibe a mensagem Forbiden liberando a visualização como deveria ser. Isso ocorre pelo fato do usuário logado (admin) ter o perfil admin (exigido para esse acesso). Detalhe: essa configuração é visível no em testrealm.json. Observe a saída do comando abaixo. Ela imprime as linhas relativas a configuração do usuário admin no arquivo testrealm.json:
$ sed -n 60,74p testrealm.json
{
"username" : "admin",
"enabled": true,
"email" : "admin@admin.com",
"firstName": "Admin",
"lastName": "Burke",
"credentials" : [
{ "type" : "password",
"value" : "password" }
],
"realmRoles": [ "user","admin" ],
"clientRoles": {
"realm-management": [ "realm-admin" ]
}
},
Vá para a URL http://localhost:8080/customer-portal/. Clique em Customer Admin Interface. Note que, agora, também é obtido o acesso a esse link.
Volte para a tela anterior. Clique em Customer Listing e, em seguida, em manage acct (URL: http://localhost:8080/auth/realms/demo/account?referrer=customer-portal). Note que o usuário logado (admin) não tem permissão de acesso. A explicação para disso está logo abaixo.
Volte para a tela anterior e clique em logout. Note que você estará na página Customer Portal. Clique em Customer Listing.
Efetue o Log in como bburque@redhat.com (utilize a nova senha que você criou).
Clique em manage acct. Note que é possível que esse usuário gerencie sua conta, o que não ocorre para o usuário admin. A explicação está nas roles definidas para esse usuário: ele possui a role manage-accout definida para o acesso ao cliente account (associado a URL base /auth/realms/demo/account). O mesmo não ocorre para o usuário admin.
Em Applications, clique em angular-product.
Clique em Reload para exibir a lista de produtos.
Clique em Sign Out para voltar a tela de autenticação.
Observe que qualquer tentativa de acesso a URLs protegidas pelo Keycloak (como, por exemplo, http://localhost:8080/angular-product/) será redirecionada a tela de autenticação provida pelo Keycloak.
Acesse a tela de administração de usuários do realm (http://localhost:8080/auth/admin/master/console/#/realms/demo/users). Clique em View all users e, em seguida, no usuário admin. Vá para a aba Role Mappings. Em Client Roles selecione account. Em Available Roles selecione manager-account e clique no botão Add selected. Fazendo isso o usuário admin poderá gerenciar sua conta acessando manage acct. Verifique!
4.2. O exemplo basic-auth
O estrutura do exemplo basic-auth pode ser observada pela seguinte saída:
$ tree
.
|-- basicauthrealm.json
|-- pom.xml
|-- README.md
`-- src
`-- main
|-- java
| `-- org
| `-- keycloak
| `-- example
| `-- basicauth
| |-- BasicAuthService.java
| `-- BasicAuthServiceApplication.java
`-- webapp
`-- WEB-INF
|-- keycloak.json
`-- web.xml
9 directories, 7 files
4.2.1. Compilando, implantando e testando a aplicação
Acesse a interface administrativa do Keycloak e importe o arquivo basicauthrealm.json.
Compile e implante a aplicação:
mvn clean package wildfly:jboss
Teste a aplicação:
curl http://admin:password@localhost:8080/basicauth/service/echo?value=hello
Observe, na interface administrativa do Keycloak, a existência de uma sessão.
5. A console de administração do Keycloak
A URL http://localhost:8080/auth/admin/index.html possibilita o acesso a interface de administração do Keycloak.
|
Note
|
Você se lembra que trocou a senha para o usuário admin no primeiro acesso a essa interface? |
6. Baixando e compilando os fontes do Keycloak
6.1. Utilizando uma versão específica
Para gerar a versão 1.5.0.Final:
git clone https://github.com/keycloak/keycloak
cd keycloak
git tag
git checkout 1.5.0.Final
mvn install
Mais detalhes sobre como contribuir na solução de um bug, gerar um release, etc, podem ser obtidos na página HackingOnKeycloak.md.