Pular para o conteúdo principal

Serviço de Autenticação (SSO)

info

Para mais detalhes sobre a implementação do Keycloak na PDPJ acesse a documentação do módulo PJe-KC.

Assista ao webinário sobre o Serviço de Autenticação (SSO):

Aspectos gerais

A autenticação na PDPJ-Br se dá por meio de uma solução de Single Sign On baseada no Keycloak, que é um aplicativo open source de gestão de identidade e acessos. O protocolo adotado é o OAuth2 (vide RFC 6749).

O Keycloak permite, dentre outras coisas, a federação de identidades. Dessa maneira, atualmente, um usuário que possua uma conta no Sistema de Controle de Acessos - CNJ Corporativo, ou em um PJe com a integração habilitada, consegue se logar no serviço do SSO com a sua senha, de forma transparente e sem necessidade de cadastro adicional.

O objetivo da adoção de um serviço de SSO é permitir que os usuários, internos e externos ao Poder Judiciário, possam, com uma única senha e uma única vez, realizar o procedimento de login na plataforma e, a partir daí, fazer uso dos diversos sistemas, serviços e módulos sem a necessidade de fornecer novas credenciais.

Integração de Sistemas

É imprescindível que os sistemas de processo judicial mantidos pelos Tribunais, para aderirem à PDPJ-Br, passem a utilizar o serviço de SSO hospedado na nuvem da PDPJ-Br. Além disso, é requisito obrigatório que todos os novos módulos, sistemas e serviços a serem desenvolvidos na PDPJ-Br façam uso do mencionado serviço de SSO.

Atualmente, diversos sistemas nacionais mantidos pelo Conselho Nacional de Justiça já estão integrados ao SSO, como o SISBAJUD, o BNMP, e o PJe. Futuramente, todos os sistemas mantidos pelo CNJ estarão integrados com a referida ferramenta.

Hands On

Do ponto de vista das aplicações, a autenticidade do usuário é verificada por meio do fornecimento de um access token no cabeçalho Authorization da requisição HTTP, no formato Bearer token:

Exemplo usando CURL

+curl -X GET "URL DO SEU SERVIÇO" -H "Authorization: bearer TOKEN"+

Antes de mais nada, o seu sistema, módulo ou serviço deve possuir um cliente cadastrado junto ao SSO, em nome de quem serão expedidos access tokens para os usuários do seu sistema/módulo/serviço. Para solicitar o cadastro do seu cliente, encaminhe um mensagem para integracaopdpj@cnj.jus.br. Idealmente, deve vir anexado ao email o arquivo JSON de exportação do Keycloak criado no ambiente local do desenvoledor, com a configuração desejada para o cliente que se deseja ver criado. Para maiores informações de como exportar informações do Keycloak, vide a documentação oficial da ferramenta.

De posse do id e do secret do seu cliente, fornecido pelo CNJ, para obter um access token deve-se realizar uma chamada POST em https://sso.stg.cloud.pje.jus.br/auth/realms/pje/protocol/openid-connect/token (homologação) ou https://sso.cloud.pje.jus.br/auth/realms/pje/protocol/openid-connect/token (produção) com os parâmetros abaixo no body e com o content-type = application/x-www-form-urlencoded:

Body da Requisição

 client_id: "[ID DO SEU CLIENTE NO KEYCLOAK]"
client_secret: "[SECRET DO SEU CLIENTE NO KEYCLOAK]"
grant_type: "password"
username: "[Usuário do CNJ Corporativo ou de outro provedor de identidade do SSO]"
password: "[Senha do CNJ Corporativo ou de outro provedor de identidade do SSO]"

O retorno será um objeto JSON contendo, dentre outras coisas, o access_token.

Exemplo de Retorno do SSO

{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI1dnJEZ1hCS21FLTdFb3J2a0U1TXU5VmxJZF9JU2dsMnY3QWYyM25EdkRVIn0.eyJleHAiOjE2Mjc1NTMzOTksImlhdCI6MT3Blc......",
"expires_in": 43199,
"refresh_expires_in": 43199,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI4ZmViYjJiOS0zYmIzLTQzZmItYTMxMS0xMjJmMmNlODIwNGUifQ.eyJleHAiOjE2Mjc1NTMzOTksImlhdCI6MTYyNzUxMDIwMCwianRpIjoiNWRlZTNlNjItY2E3Zi00MDE5LTgxZDktNzM4NDU2OTQwNTBmIiwiaXNzIjoiaHR0cHM6Ly9zc28uc3RnLmNsb3VkLnBqZS5qdXMuYnIvYXV0aC9yZWFsbXMvcGplIiwiYXVkIjoiaHR0cHM6Ly9zc28uc3RnLmNsb3VkLnBqZS5qdXMuYnIvYXV0aC9yZWFsbXMvcGplIiwic3ViIjoiYTIzOTc3M2ItNmNjNi00YzQ4LWFkNjAtNDEwYzE0MzY1YjljIiwidHlwIjoiUmVmcmVzaCIsImF6cCI6InNpc2JhanVkLWFwaSIsInNlc3Npb25fc3RhdGUiOiIyODQzZjE1MS1jMTgyLTQ4NjAtOWM3OC05NmE0ZjM4ZDFlZmUiLCJzY29wZSI6InByb2ZpbGUgZW1haWwifQ.8Pj6ifJW4y7fAIVtJMBAzZMHJmxX3MNzV7E3KxVVL7I",
"token_type": "bearer",
"not-before-policy": 1627493577,
"session_state": "2843f151-c182-4860-9c78-96a4f38d1efe",
"scope": "profile email"
}

Alternativamente, é possível obter um token em nome do próprio cliente, funcionando, nesse caso, como um usuário de serviço (service account). Para tanto, modifique o grant_type para client_credentials, sendo desnecessário, nesse caso, informar qualquer usuário ou senha.

Todos os tokens fornecidos pelo SSO estão no formato JWT (JSON Web Token), sendo possível visualizar o seu conteúdo original (não codificado em Base64, como no exemplo mais acima) por meio de sítios como https://jwt.io/.

Release Notes

Acesse os release notes do módulo PJe-KC (implementação do Keycloak) na Documentação do PJe.