-
Notifications
You must be signed in to change notification settings - Fork 16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adicionar exemplo de como integrar o Keycloak como Identity Broker e o Gov.br como Identity Provider #25
Comments
Alguem testou isso? Deu certo? |
@rdurelli é basicamente isso, eu sugeriria apenas algumas alterações:
É importante notar que:
Eu venho usando o keycloak como intermediário entre o órgão e o gov.br há anos com essas configurações e funciona muito bem, mas com essas ressalvas. UPDATE:
|
Basicamente vc deu uma aula :) irei teste. Qualquer coisa lhe peço ajuda. Muito obrigado |
Perfeito as explicações @weltonrodrigo, Sobre o scope "govbr_confiabilidades" é necessário para permitir que o token retornado pelo Gov.br tenha permissão de chamar os serviços de confiabilidade, do contrário retornará um erro assim:
Pelo menos foi o que aconteceu nos meus testes. |
Em que ponto o Login gov.br interpreta a RFC 7517 errada ? O exemplo no https://www.rfc-editor.org/rfc/rfc7517#appendix-A tem os mesmos campos retornados pelo https://sso.acesso.gov.br/jwk. Há algum problema com os valores? |
Você tem razão que o RFC coloca o campo 'use' como OPTIONAL. É mais correto eu dizer que o gov.br e o keycloak discordam sobre o formato do jwk. No teste que realizei pra fazer esse comentário o pyjwt conseguiu validar corretamente a partir da url do keyset e quando eu criei esse repo, isso não acontecia, tinha que fornecer a chave manualmente. Suponho então que o pyjwt tenha se alinhado. |
Quando adiciono um novo identity provider no keycloak, ele coloca um valor default no campo redirect uri. Eu não consigo edita-lo e para colocar o valor https://sso.tjsc..... conforme mostra no print. Alguma dica? Valeu |
O Redirect URI é a URL do seu Keycloak (no print é o Keycloak do TJSC) e não pode ser alterado, já o Authorization URL é a do Gov.br. |
estou tantando fazer a implementação do gov.br em um servidor de homologação da minha instituição, no entanto após informar o CPF e senha na tela de login do Gov.br, o usuário é retornado pra aplicação e o keycloak exibe a mensagem:
no log do keycloak aparece esse erro:
alguém tem alguma ideia do que pode ser? desde já agradeço |
Experimenta desativar a opção “validate signature”. |
Muito obrigado @weltonrodrigo . Desativando a checagem pelo JWKS o login funciona perfeitamente. No entanto ao fazer isso eu não estaria diminuindo a segurança do processo de login? Existe alguma maneira de realizar a integração mantendo a checagem da assinatura e tmb usando PKCE? |
Isso está relacionado a issue #29.
Sim. Estaria. |
Entendi. Obrigado. Caso eu crie um endopoint próprio, que leia o objeto retornado por https://sso.acesso.gov.br/jwk, adicione a ele o campo Em teoria, com essa estratégia eu poderia realizar a assinatura, correto? E imagino que nesse cenário não seria possível ativar a opção 'Use PKCE', certo? |
Sim, @carlosrodovalho, diminui. Mas não é teu grave pq tá num ambiente controlado e você recebe o token gov.br a partir de um request que você mesmo faz ao endpoint de token do Gov.br. Nao é algo que você recebe dos clientes e precisa validar. Você pode manter a validação copiando e colando a chave no campo apropriado (e substituindo manualmente quando o gov.br trocar a chave). O PKCE é independente e não relacionado. Você pode ativar ele mesmo sem validar assinaturas do token. Sobre o seu endpoint ajustando o keyset, vai funcionar de boas. |
Bom dia! Estou fazendo a integração entre o Keycloak e o Gov.br, está funcionando, porém consigo realizar o logout do Gov.br, mas o Keycloak ainda permanece logado. Alguém já viu esse caso? Fiz as configurações de logout URL que o passo a passo do Gov.br forneceu. |
Entendi que você fez logout no gov.br usando uma outra aplicação, sem envolver a aplicação que está falando com o keycloak. Por exemplo, você fez login usando a sua aplicação A, que fala com o gov.br por intermédio do keycloak e aí você entrou no acesso.gov.br (já estava logado), fez logout por lá e aí quando você foi fazer login por outra aplicação B sua também envolvendo o keycloak o usuário já estava logado? Tá correto o entendimento? Salvo melhor juízo, o gov.br não implementa o logout centralizado. Isto é, se você logar com gov.br numa aplicação via keycloak e depois numa outra aba do mesmo browser você acessar acesso.gov.br e fizer logout por lá (note que o acesso.gov.br é uma aplicação que não tem nenhuma ligação com o seu keycloak, só com o gov.br), o keycloak não vai saber que você deslogou do gov.br. Isso é o chamado RP-Initiated logout (o Relaying Party no caso aí é o acesso.gov.br) e o gov.br enquanto Identity Provider deveria implementar ou o Front-channel logout ou o Backchannel logout. Em outras palavras, o gov.br é que é responsável por avisar as outras aplicações A,B ou C (ou o seu keycloak, no caso) que foi feito um logout no gov.br em outra janela, iniciado por outra aplicação D. Até onde eu sei ele não faz isso, mas seria ótimo que eu estivesse errado e só minha configuração que foi mal feita. Esse comportamento (não executar o logout centralizado) não é tão absurdo assim e uma evidência disso é que o Login.gov americano não faz isso O workaround nesse caso é você limitar o tempo máximo de sessão do seu keycloak para 59 minutos (pra ser menor que o do gov.br) e configurar sua aplicação para ter uma expiração adequada do token de acesso (e usar refresh tokens). Assim, o seu usuário vai ficar no máximo 59 minutos + logado no seu keycloak depois de ter feito logout no gov.br em outro lugar. |
Olá @weltonrodrigo! Perfeita sua explicação, muito obrigado! |
Olá,
Gostaria de compartilhar a configuração que fiz para o Keycloak usar o Gov.br como Identity provider, ou seja, como adicionar um botão no Keycloak para o usuário se logar com o Gov.br.
A configuração utilizada:
Acredito que seria interessante colocar no exemplo de implementação, mas apenas ficando registrado aqui já pode ajudar alguém.
The text was updated successfully, but these errors were encountered: