Como funciona o SSO com o Active Directory, por meio do qual os usuários fazem logon de forma transparente em um aplicativo da Web de intranet?

33

Disseram-me que é possível fazer uma aplicação web que não requer um login. O usuário efetua login no Windows, que é autenticado por meio de uma consulta do Active Directory (LDAP). Então, eles devem ser capazes de ir ao meu webapp e nunca ver um prompt de login. Esses clientes têm se referido a isso como Single Sign On (talvez de forma incorreta e parte da minha confusão).

Mas, pelo que li, o Sign-on único dos documentos do Tomcat é:

The Single Sign On Valve is utilized when you wish to give users the ability to sign on to any one of the web applications associated with your virtual host, and then have their identity recognized by all other web applications on the same virtual host.

Isso está perfeitamente claro para mim. O usuário precisa fazer o login uma vez e pode acessar todos os aplicativos da Web em uma instância do tomcat. Mas, o que eu preciso fazer é de alguma forma deixá-los entrar sem nunca fornecer quaisquer credenciais para o meu servidor tomcat.

Então, para que isso funcione, imagino:

  • O usuário faz uma solicitação para alguma página
  • O servidor não vê nenhum token de sessão e, em seguida, solicita ao cliente algumas credenciais.
  • O navegador do cliente sem qualquer intervenção do usuário fornece algumas credenciais para o servidor.
  • Em seguida, usando essas credenciais fornecidas pelo navegador do cliente, ele faz uma pesquisa em um LDAP.

Eu vi alguns exemplos que usam certificados do lado do cliente ... particularmente o sistema DoD PKI que faz algum sentido para mim, porque nesses casos você configura o Tomcat para solicitar certs do lado do cliente , mas apenas acessando o Windows Eu não vejo como isso funcionaria e quais informações o navegador passaria para o servidor, etc. É para isso que o NTLM é usado?

    
por blak3r 20.07.2011 / 20:52

4 respostas

33

Antes de mais nada - e no caso de outros usuários acessarem esta página - existem apenas alguns métodos de autenticação que permitem fazer SSO sem aviso prévio. Estes são NTLM e Kerberos . Por outro lado, o LDAP nunca fornecerá SSO sem aviso prévio.

O NTLM é na verdade NTLMv1 e NTLMv2. Eles são muito diferentes e o NTLMv1 é obsoleto devido a sérios problemas de segurança. Você deve se afastar das soluções de autenticação Java que não conseguem identificar corretamente se elas suportam NTLMv1 ou NTLMv2 porque elas usam somente a palavra "NTLM" em sua documentação. As chances são de que o desenvolvedor da solução de segurança não se conheça, o que é mais um motivo para procurar a saída de incêndio.

Ao contrário da crença tradicional, NTLMv1 e NTLMv2 são totalmente documentados pela Microsoft, mas você ainda encontrará soluções que afirmam ter "engenharia reversa" do protocolo. É verdade que isso era necessário antes da Microsoft documentar os protocolos que acredito por volta de 2006 ou 2007. De qualquer forma, o NTLMv1 é um não-não. Não há nada errado com o NTLMv2 per-se, mas a Microsoft tem desativado o NTLM (em qualquer formato) em todos os seus produtos em favor da autenticação Kerberos. NTLMv1 está morto há muito tempo e o NTLMv2 agora é usado apenas pela Microsoft nos casos em que nenhum controlador de domínio está disponível. Resumindo: NTLM (em qualquer forma) não é realmente o caminho a seguir. Na verdade, devemos saudar a Microsoft por adotar uma abordagem baseada em padrões aqui.

Isso deixa você com o Kerberos. A Microsoft criou um protocolo para negociar e transportar informações de autenticação por HTTP. Isso é conhecido nos produtos da Microsoft como " Autenticação Integrada do Windows ", mas foi definido como um padrão oficial sob o nome de SPNEGO . É isso que você deveria estar procurando. O SPNEGO suporta o NTLMv2 e o Kerberos como o mecanismo de autenticação subjacente, mas pelas razões acima, você deve estar direcionando o Kerberos em vez do NTLMv2.

Integrei com sucesso vários aplicativos do Tomcat (em execução no Linux / Solaris) com o Active Directory usando o Projeto SPNEGO no SourceForge . Eu encontrei esta para ser a abordagem mais simples. Isso oferece um SSO sem prompt similar ao que, por exemplo, um servidor Sharepoint faz. Provavelmente, isso é o que seus usuários esperam quando falam sobre "SSO". Acertar a configuração do Kerberos, gerar chaves e configurar contas 'fictícias' no Active Directory pode ser um incômodo, mas, depois de acertar, funciona como um encanto.

A única coisa que eu não gosto sobre o Projeto SPNEGO no SourceForge é que eu não entendo quantas vezes ele realiza a autenticação. Minha suspeita desagradável é que ele faz isso para cada exibição de página, em vez de uma vez para cada sessão. Talvez eu esteja errado nisso. De qualquer forma: isso destaca outra coisa a considerar em soluções de SSO: você não quer implementar uma solução que "spams" seu provedor de identidade (digamos, o Active Directory) com solicitações desnecessárias.

    
por 20.07.2013 / 13:07
2

Em um ambiente do Windows Active Directory, Sign-on único é usado para significar que visitar uma página da Web interna transmite suas permissões de login do Windows e o servidor da Web pode atuar sobre elas. É algo que o NTLM é usado, mas as implementações mais recentes usam o Kerberos.

Se você abrir um site do Sharepoint Server, ele saberá quem você é sem precisar de um nome de usuário e senha de login, mas isso funciona apenas para sites internos na mesma rede, não acho que faça sentido trabalhar em um site público. (Eu não posso dizer se você quer dizer "host virtual", como em um vache Apache ou como em um servidor hospedado terceirizado).

Este é um documento da Microsoft descrevendo como a autenticação Kerberos funciona em um servidor Web que executa o IIS / ASP.Net: link

Parece possível fazer com o Apache / Tomcat / Java. Aqui está um PDF descrevendo uma implementação da Universidade do Reino Unido: link e um projeto Codeplex para ele: link e Openfire tem alguma documentação relacionada com o uso geral de Java / Kerberos aqui ( link ).

    
por 29.07.2011 / 22:55
0

Parece que você está descrevendo o que a Microsoft chama de Autenticação Integrada do Windows.

Parece que o Tomcat oferece suporte à Autenticação do Windows, com base em artigo .

    
por 29.07.2011 / 21:03
0

Para começar, você não pode evitar o login. Se você quiser identificar usuários, você precisa fazer com que eles efetuem login. Esqueça o NTLM, o Kerberos vem para o resgate - ele pode fazer tudo de uma maneira completamente transparente.

O SingleSignOnValve não é o que você está procurando. Se você usar o Tomcat 7, poderá usar o SpnegoAuthenticator imediatamente, mas em 6 você tem que usar este .

    
por 20.07.2011 / 21:09