SSO não funciona entre um navegador e um Keycloak usando uma federação de usuários com integração Kerberos a um Windows AD

SSO não funciona entre um navegador e um Keycloak usando uma federação de usuários com integração Kerberos a um Windows AD

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:

  1. O navegador envia solicitação get para o endpoint de autorização com os parâmetros necessários

  2. Keycloak responde corretamente:
    -com um 401 Unauthorized
    -com o cabeçalho "WWW-Authenticate: Negotiate"

  3. Acho que o navegador envia corretamente uma nova solicitação get:
    -com "Autorização: Negociar TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAKAGFKAAAADw=="
    Isto está enviando o token spnego

  4. Keycloak 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.

informação relacionada