4. Usando keycloak na dojot

A partir da versão v0.8.0, a dojot começou a utilizar o keycloak e removeu a utilização do antigo serviço auth. Keycloak é uma solução de gerenciamento de acesso e identidade de código aberto.

Neste tutorial, vamos explicar alguns pontos importantes de configuração e uso do keycloak com a dojot.

Nota

  • Público: usuários e administradores

  • Nível: básico a intermediário

  • Tempo de leitura: 20 m

Atenção

A dojot tenant is equivalent to a keycloak realm.

4.1. Requerido

4.2. Recomendações

  • Sempre utilize HTTPs

  • Use senhas fortes, por default o mínimo exigido são senhas com 8 caracteres, um número, uma letra maiúscula, uma letra minúscula e um caracter especial

  • Configure o SMTP

4.3. Acessando o Painel Administrativo

Substitua <url> e <realm> para seu caso

4.3.1. Utilizando o realm master

Atenção

Só é possível acessar esta página utilizando localhost ou https.

Para usar um usuário que pertence ao Realm master e pode controlar todos os realms, acesse <url>/auth/` , por exemplo https://dojot.com.br/auth.

4.3.2. Utilizando um usuário com papel (role) de admin

Para usar um usuário que pertence a um realm pode controlar somente este realm, acesse <url>/auth/admin/<realm>/console , por exemplo, https://dojot.com.br/auth/admin/admin/console.

4.3.3. Verificando realm selecionado

Após acessar a interface administrativa do keycloak utilizando um dos caminhos acima certifique que você está com o realm que quer utilizar selecionado, na barra lateral esquerda é possível selecionar o realm de interesse, como destacado na imagem abaixo:

Checking selected realm

4.4. Acessando Configurações de uma Conta

Substitua <url> e <realm> para seu caso

Para acessar sua conta e fazer mudanças como habilitar autenticação de 2 fatores, mudar senha, mudar e-mail, acesse o link <url>/auth/realms/<realm>/account, por exemplo, https://dojot.com.br/auth/realms/admin/account

4.5. Criando um novo usuário

Acesse o painel administrativo como explicado no tópico Acessando o Painel Administrativo.

No menu da barra à esquerda selecione a opção Users e em seguida clique em Add User.

Now let’s create the user, first fill in Username. It is recommended to fill in the Email field and in Required User Actions Add the Update Password and Verify Email options, but for Verify Email to make sense it is necessary to have the SMTP configured for the Realm of interest. If you do not want to configure SMTP do not put Verify Email. Another point is that if an SMTP has not been configured, it is necessary to create a temporary password and provide the user, to do so, access the Credentials tab after creating in Save.

Além disso é importante definir o papel**(**role) deste usuário no seu Realm, sem isso ele não poderá ser utilizado. Após clicar em ` Save ` uma das abas será a Role Mapping, clique sobre ela para definir o papel do usuário. Na aba Role Mapping na caixa Available Roles haverá as opções ` admin ` e ` user ` (caso não forem criados outros Roles) . Um usuário com o role ` admin ` tem acesso a todas as APIs e também ao Painel Administrativo do seu realm enquanto que um usuário com o Role ` user ` tem acesso a API, mas não pode acessar o painel administrativo. Selecione o Role (Papel) que se encaixa a esse novo usuário e o adicione na Caixa Assigned Roles.

4.6. Configurando SMTP pela interface gráfica

Acesse o painel administrativo como explicado no tópico Acessando o Painel Administrativo.

No menu da barra à esquerda selecione a opção Realm Settings e em seguida selecione a aba Email e faça as configurações necessárias.

4.7. Configurando HTTPs como requerido pela interface gráfica

Nota

Você deve estar utilizando um deployment com HTTPs configurado.

Acesse o painel administrativo como explicado no tópico Acessando o Painel Administrativo.

No menu da barra à esquerda selecione a opção Realm Settings e em seguida selecione a aba Login, em Require SSL selecione a opção external requests e clique em Save

4.8. Criando um novo realm (tenant na dojot)

Acesse o painel administrativo como explicado no tópico Acessando o Painel Administrativo, porém necessariamente utilizando o realm master.

No menu lateral à esquerda, passe o mouse em cima do nome do Realm corrente e irá aparecer uma opção Add realm, clique sobre ela.

Nota

O realm criado aqui será baseado no arquivo passado como base para o keycloak, veja mais em Arquivo de configuração do keycloak base para criação de realms.

4.9. Obtendo Token de Acesso (Access Token JWT)

4.9.2. Para uma aplicação backend

Para utilizar o Token de Acesso em uma aplicação backend recomenda-se criar um novo Cliente para o realm the interesse ou os realms de interesse, lembre-se de configuração-los em Client Protocol com o valor openid-connect, Access Type com o valor Confidential e utilizar o Secret obtido na aba Credentials, existem várias maneiras de configurações possíveis. É importante seguir os padrões estabelecidos de segurança atualmente para o OAuth 2 e o OpenIDConnect. Há várias bibliotecas para keycloak em várias linguagens que podem auxiliar neste desenvolvimento.

4.9.3. Para uma aplicação frontend

Nós temos um microsserviço com o intuito de ajudar no desenvolvimento a assegurar mais segurança para utilização do keycloak com a dojot, veja mais sobre em Backstage. Há como utilizar o keycloak diretamente com `PKCE`_e OpenID Connect também. É importante seguir os padrões estabelecidos de segurança atualmente para o OAuth 2 e o OpenIDConnect.

4.9.4. Para uma aplicação mobile

Nós não temos casos de uso, mas é importante seguir os padrões estabelecidos de segurança atualmente para o OAuth 2 e o OpenIDConnect. Alguns pontos iniciais seriam para prestar a atenção seriam criar um Cliente novo com o Access Type public e utilizar PKCE..

4.10. Configurações de Deployment

4.10.1. Configurando Senhas (Requerido) via variáveis de ambiente

Os deployments (**Docker compose e Ansible - kubernetes **) da dojot não vem com senhas definidas para os usuário admin e master e é necessário configurar essas senhas para que os deployments inicializem corretamente, caso não configurados os serviços não irão inicializar e a dojot ficará indisponível. Mas atenção esses valores só são aplicados quando o keycloak inicializar pela primeira vez e os realm são criados, não afetará os realms já existentes.

Atenção

Ao configurar use senhas fortes, por default o mínimo exigido são senhas com 8 caracteres, um número, uma letra maiúscula, uma letra minúscula e um caracter especial.

4.10.1.1. Docker compose

É necessário definir um valor de senha no arquivo .env para as variáveis ``KEYCLOAK_MASTER_PASSWORD `` e ``KEYCLOAK_ADMIN_PASSWORD_TEMP ``. O valor ``KEYCLOAK_ADMIN_PASSWORD_TEMP `` será a senha do usuário admin de todos os realms quando criado. Veja mais em settings required.

4.10.1.2. Ansible (kubernetes)

Trabalho em progresso

4.10.2. Configurando SMTP via variáveis de ambiente

É possível configurar SMTP via variáveis de ambiente, mas atenção esses valores só são aplicados quando o realm é criado, não afetará os realms já existentes. Para configurar um realm que já existe veja Configurando SMTP pela interface gráfica.

4.10.2.2. Ansible (kubernetes)

Trabalho em progresso

4.10.3. Configurando HTTPs como requerido via variáveis de ambiente

Esses valores só são aplicados quando o realm é criado, não afetará os realms já existentes e o realm master. Para realms já existentes veja Configurando HTTPs como requerido pela interface gráfica.

4.10.3.1. Docker compose

É necessário definir o valor EXTERNAL no arquivo .env para a variável KEYCLOAK_REALM_SSL_MODE . Veja mais em configuring HTTPs.

4.10.3.2. Ansible (kubernetes)

Trabalho em progresso

4.10.4. Arquivo de configuração do keycloak base para criação de realms

Arquivo de configuração usado como base para criação dos realms no keycloak. É o arquivo exportado de um realm pelo keycloak completo. Este arquivo é configurado usando a variável de ambiente DOJOT_CUSTOM_REALM_REP_FILE no serviço do keycloak. Ao criar um novo realm os identificadores (ids) e nome do realm neste arquivo são ignorados. Porém é importante salientar que nossos deployments tanto para docker-compose quanto para ansible (kubernetes) Já possuem um arquivo com as configurações necessárias para utilização da dojot.

4.10.4.1. Docker compose

No caso do docker-compose este arquivo encontra-se em keycloak/customRealmRepresentation.json

4.10.4.2. Ansible (kubernetes)

Trabalho em progresso

4.10.5. Bibliotecas antigas

Para manter compatibilidade com a dojot é necessário fornecer o login e senha do master ou de um usuário que consiga obter a lista de realms disponíveis nas bibliotecas antigas, sendo elas dojot-module-nodejs, iotagent-nodejs, dojot-module-python, dojot-module-java, iotagent-java, veja mais nas suas respectivas documentações. Porém é importante salientar que nossos deployments tanto para docker-compose quanto para ansible (kubernetes) já estão preparados para isso e é apenas necessário configurar as senhas como descrito no tópico Configurando Senhas (Requerido) via variáveis de ambiente.

4.10.6. Configurando novas rotas, serviços, recursos, no keycloak para utilizar autorização

Em keycloak settings example há um caso básico de exemplo de configuração, você pode utilizá-lo como base para novas configurações.

4.10.7. Configurando keycloak com Nginx

Em how to use keycloak with a nginx proxy há um exemplo com as configurações necessárias.