Temos uma configuração do IDAM um pouco complicada:
Ou seja, a máquina e o navegador do usuário final ficam em uma rede com o AD pai, e nosso aplicativo baseado em Jetty e o AD com o qual ele pode conversar (AD local) ficam no outro.
Há uma confiança bidirecional entre os dois ADs. O navegador na rede pai possui o domínio local em sites confiáveis.
A configuração do servidor Jetty é a seguinte:
- ele usa um arquivo keytab gerado em relação a um principal no AD local
- está sendo executado como um serviço do Windows em um usuário definido no AD local
- o domínio, o mapeamento de domínio de domínio e o kdc são definidos no domínio do AD local
- ele usa spnego - isInitiator está definido como false; doNotPrompt é true; storeKey é verdadeiro
O problema é:
- como teste, acessar o servidor a partir de um navegador dentro da rede local (por exemplo, vinculado ao AD local) funciona - as informações de depuração do Kerberos aparecem nos logs, posso ver a negociação correta do Kerberos no tráfego HTTP e o usuário é conectado automaticamente . Brilhante.
no entanto , acessar o servidor a partir de um navegador dentro da rede pai (que é como nossos usuários farão as coisas) não funciona! O navegador recupera um 401 unuth, mas solicita credenciais, que, quando inseridas, exibem uma tela em branco. Em seguida, clicar na barra de endereço e pressionar Enter faz uma das duas coisas, dependendo se as credenciais são para o AD remoto ou local:
- credenciais locais do AD, em seguida, efetuem login corretamente, com o Kerberos do zero nos logs (solicitação GET, resposta sem resposta 401, solicitação de cabeçalhos Kerberos etc.)
- credenciais AD remotos não faça o login (request GET, 401 resposta unauth, o que parece ser um cabeçalho NTLM:
Authorization: Negotiate <60 or so random chars>
)
De qualquer maneira, o fato de que isso está acontecendo está errado!
Existe uma explicação para esses sintomas? A configuração que temos pode fazer o que queremos?
Em termos da descrição acima, pode estar errado: qualquer configuração que eu mencionei em relação ao servidor Jetty deve ser precisa, como fiz. Estou feliz em fornecer mais detalhes. Qualquer configuração referente ao AD ou ao navegador da rede pai é potencialmente suspeita, porque não está sob meu controle e eu tive a configuração relatada para mim em vez de ver por mim mesma.
fonte
Respostas:
Sem ver a captura de pacote, acho que o SPN HTTP / www.website.com precisa estar registrado na conta que está executando o aplicativo. A equipe dos Serviços de Diretório da Microsoft possui uma excelente publicação com várias partes abordando este tópico no seguinte URL.
https://blogs.technet.microsoft.com/askds/2008/05/29/kerberos-authentication-problems-service-principal-name-spn-issues-part-1/
Execute uma captura de pacote (netmon, wireshark) de um cliente em cada ambiente para identificar qual SPN está sendo procurado. Depois de determinado, use o setspn cmd para registrá-lo na conta que está executando o aplicativo.
FWIW, o Kerberos funciona apenas na LAN. Se alguém precisar acessar onde os controladores de domínio não estiverem acessíveis, convém considerar um SSO como Shibboleth ou ADFS.
EDIT: como mencionado por @ alex-h , os navegadores precisarão ser configurados para autenticação silenciosa via Kerberos.
Por fim, esse é um problema comum nas implantações do Microsoft Sharepoint. Eles querem que o SSO via Kerberos ocorra silenciosamente depois que os usuários forem autenticados no domínio. Portanto, se as respostas acima não resolverem o seu problema, tente verificar os fóruns deles, como os seguintes:
Kerberos no Chrome, Safari ou FireFox
fonte
Tente primeiro em um navegador que não possui o NTLM ativado (Chrome / Firefox). Parece que o problema é que você tem a pré-autenticação ativada e pode ser possível que a confiança bidirecional possa não estar em vigor.
Para a pré-autenticação, consulte aqui https://support.microsoft.com/en-us/kb/2749007 e aqui https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html .
fonte