
Estou tentando fazer o SSO funcionar usando um navegador (Chrome ou Firefox) e um keycloak configurado com um domínio AD de federação de usuários (o Kerberos está configurado).
Primeiro apresento a visão geral do que tenho e depois adiciono mais detalhes.
A visão geral:
Chamando o endpoint de autorização ".../auth/realms/test_realm/protocol/openid-connect/auth" e usando tcpdump posso ver:
O navegador envia solicitação get para o endpoint de autorização com os parâmetros necessários
Keycloak responde corretamente:
-com um 401 Unauthorized
-com o cabeçalho "WWW-Authenticate: Negotiate"Acho que o navegador envia corretamente uma nova solicitação get:
-com "Autorização: Negociar TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAKAGFKAAAADw=="
Isto está enviando o token spnegoKeycloak responde com "200 OK", mas com a página de login e nenhum token ou URL de retorno de chamada, não tenho erros no log do Keycloak
P: O que o keycloak deve responder aqui? Deve enviar para o URL de retorno de chamada com alguns cookies comoKEYCLOAK_IDENTITeKEYCLOAK_SESSION, certo? Com esses cookies posso chamar o endpoint do token para obter o token para usar no aplicativo.
P: alguma ideia do que está faltando? Eu sei que há muitas peças, mas talvez esteja faltando algo óbvio.
Ao fazer um login manual, chamo um endpoint de login-actions/authenticate que retorna os cookies KEYCLOAK_IDENTIT e KEYCLOAK_SESSION que posso usar para chamar o endpoint do token e obter o token.
Estou usando o mesmo usuário que fez login no domínio de teste, então sei que o keycloak pode autenticar o usuário testado.
Agora com mais detalhes
Para configurar o Keycloak segui os documentos oficiais dehttps://www.keycloak.org/docs/latest/server_admin/
Na máquina cliente Windows (navegador Chrome ou Firefox, testei ambos):
-Eu adicionei o URL à lista de permissões
-Estou chamando o endpoint de autorização com os parâmetros necessários
No domínio AD do Windows Server 2019
-Eu criei um arquivo keytab usando:
ktpass /out testdomainlocal_keytab_file.keytab /princ HTTP/[e-mail protegido]/mapuser keycloak_kerberos /pass "somepass" /crypto All /ptype KRB5_NT_PRINCIPAL /kvno 1
-O usuário keycloak_kerberos existe em meu domínio de teste
No linux rhel8.8 eu tenho o keycloak 22.01
-Adicionei a máquina linux ao domínio de teste usando "realm join"
-Adicionei a configuração da federação de usuários para um AD LDAP que pode autenticar manualmente o usuário de teste ldap
-Ativei a integração Kerberos com o principal e o keytab criado a partir da máquina AD
adicionou as informações do domínio ao arquivo /etc/krb5.conf.
Posso mostrar mais detalhes, se necessário, mas preciso tornar as informações anônimas.