Me dijeron que es posible hacer una aplicación web que no requiera un inicio de sesión. El usuario inicia sesión en Windows, que se autentica mediante una búsqueda de Active Directory (LDAP). Luego, deberían poder ir a mi aplicación web y nunca ver un mensaje de inicio de sesión. Estos clientes se han referido a esto como Single Sign On (quizás incorrectamente y como parte de mi confusión).
Pero, por lo que leí Single Sign On de los documentos de Tomcat es:
La válvula de inicio de sesión único se utiliza cuando desea dar a los usuarios la capacidad de iniciar sesión en cualquiera de las aplicaciones web asociadas con su host virtual , y luego que todas las demás aplicaciones web reconozcan su identidad en el mismo host virtual.
Esto está perfectamente claro para mí. El usuario tiene que iniciar sesión una vez y puede acceder a todas las aplicaciones web en una instancia de tomcat. Pero, lo que tengo que hacer es permitirles iniciar sesión sin proporcionar ninguna credencial a mi servidor Tomcat.
Entonces, para que esto funcione, me imagino:
- El usuario solicita alguna página
- El servidor no ve ningún token de sesión y luego solicita al cliente algunas credenciales.
- El navegador del cliente sin ninguna intervención del usuario proporciona algunas credenciales al servidor.
- Luego, utilizando esas credenciales proporcionadas por el navegador del cliente, realiza una búsqueda en un LDAP.
He visto algunos ejemplos que usan certificados del lado del cliente ... particularmente el sistema DoD PKI que tiene sentido para mí porque en esos casos configuras Tomcat para solicitar certificados del lado del cliente , pero solo iniciando sesión en Windows no veo cómo esto funcionaría y qué información pasaría el navegador al servidor, etc. ¿Para esto se utiliza NTLM?
En un entorno de Windows Active Directory, el inicio de sesión único se utiliza para significar que visitar una página web interna conlleva sus permisos de inicio de sesión de Windows y el servidor web puede actuar sobre ellos. Es algo para lo que se usa NTLM, pero las implementaciones más nuevas usan Kerberos en su lugar.
Si abre un sitio web de Sharepoint Server, sabe quién es sin necesidad de un nombre de usuario y contraseña de inicio de sesión, pero esto funciona solo para sitios web internos en la misma red, no creo que tenga mucho sentido que funcione en un sitio web público. (No puedo decir si te refieres a "host virtual" como en un servidor virtual Apache o como en un servidor alojado externo).
Aquí hay un documento de Microsoft que describe cómo funciona la autenticación Kerberos para un servidor web que ejecuta IIS / ASP.Net: http://msdn.microsoft.com/en-us/library/ff647076.aspx
Parece posible hacerlo con Apache / Tomcat / Java. Aquí hay un PDF que describe la implementación de eso en la Universidad del Reino Unido: http://gfivo.ncl.ac.uk/documents/UsingKerberosticketsfortrueSingleSignOn.pdf y un proyecto de Codeplex para ello: http://tomcatspnego.codeplex.com/ y Openfire tienen algunos documentación relacionada con el trabajo general con Java / Kerberos aquí ( http://community.igniterealtime.org/docs/DOC-1060 ).
fuente
Parece que está describiendo a lo que Microsoft se refiere como autenticación integrada de Windows.
Parece que Tomcat es compatible con la autenticación de Windows, según este artículo .
fuente
Para empezar, no puede evitar iniciar sesión. Si desea identificar a los usuarios, debe hacer que inicien sesión. Olvídese de NTLM, Kerberos viene al rescate: puede hacer todo de una manera completamente transparente.
SingleSignOnValve no es lo que estás buscando. Si utiliza Tomcat 7, se puede utilizar el SpnegoAuthenticator de inmediato, pero el 6 de usted tiene que utilizar este .
fuente