java authentication active-directory single-sign-on windows-integrated-auth

¿Cómo utilizar el inicio de sesión de Windows para el inicio de sesión único y para las entradas de Active Directory para la aplicación Desktop Java?



azure ad login (8)

¿Ha considerado utilizar la API de JNA (le permite hacer llamadas nativas al sistema operativo fácilmente)?

Puede llamar a la documentación de GetCurrentUser MSDN en http://msdn.microsoft.com/en-us/library/ms724432(VS.85).aspx . Está ubicado dentro de Advapi32.dll.

También tiene una versión unicode, GetCurrentUserW si es necesario.

Y tienes razón. Parece que la variable de entorno puede cambiarse, por lo que puede ser engañoso de usar.

No estoy seguro acerca de las implicaciones de plataforma cruzada en las ventanas de 32/64 bits. Si necesita la solución en código, estoy seguro de que podría escribir algo para eso.

Pero sí, solo una idea :)

Me gustaría que mi aplicación Java de escritorio tenga inicio de sesión único relacionado con los usuarios de Active Directory. En dos pasos, me gustaría:

  1. Asegúrese de que el usuario en particular haya iniciado sesión en Windows con alguna entrada de usuario.
  2. Echa un vistazo a la información de configuración para ese usuario del Directorio Activo

Con Java: forma de determinar el usuario actual de Windows , puedo obtener el nombre del usuario actual de Windows, pero ¿puedo confiar en eso? Pienso que el

System.getProperty("user.name")

no será lo suficientemente seguro? ("user.name" parece obtenerse de las variables de entorno, así que no puedo confiar en eso, ¿no?)

Pregunta ¿ Autenticando contra Active Directory con Java en Linux me proporciona la autenticación para el nombre + pase, pero me gustaría autenticarme en base al inicio de sesión de Windows?

Para el acceso a Active Directory, ¿el LDAP probablemente sería la elección?

No estoy totalmente seguro de si estoy haciendo las preguntas correctas, pero espero que alguien tenga algunas ideas para transmitirme.


Compruebe jCifs en http://jcifs.samba.org/

Aparte de eso, quédate con LDAP (de hecho, debería ser mi primer intento, pero ...)



No es compatible. Java 6 tiene mejoras, pero aún no es suficiente.

Java tiene su propia pila GSS. El problema es para el inicio de sesión único, necesita obtener el boleto de Kerberos del sistema operativo (no la pila de Java). De lo contrario, el usuario tiene que autenticarse por segunda vez (lo que frustra el objetivo del inicio de sesión único).

Mira http://java.sun.com/developer/technicalArticles/J2SE/security/ . Mire hacia abajo para "Acceder a la GSS-API nativa" y se trata de una nueva propiedad del sistema sun.security.jgss.native que, cuando se establece en verdadero, hace que Java use la implementación de OS GSS subyacente, dando acceso a la autenticación de nivel de sistema operativo. ¡Perfecto! ... excepto que solo es compatible con Solaris y Linux, no con Microsoft Windows.

Sin embargo, Java 6 parece tener suficiente soporte para actuar como un servidor que recibe solicitudes de autenticación SPNEGO de IE y luego autentica a ese usuario contra Active Directory. Es solo el soporte de escritorio del cliente que aún está incompleto.


Probablemente obtendrá la mayor flexibilidad utilizando Spring Security . Puede usarlo con autenticación JAAS y LDAP.


Proyecto Waffle tiene código de cliente y servidor para hacer SSO en Windows. Está basado en JNA, no se requieren bibliotecas nativas.



Use JAAS con un LDAP LoginModule . Esto le permitirá conectarse a la infraestructura de seguridad subyacente de Java.

Cuando necesite desconectar la aplicación o "depurar" la aplicación, puede cambiar fácilmente el módulo LDAP por un módulo ficticio. Esto le permite continuar probando su "seguridad", sin depender de Active Directory. Altamente comprobable, desacoplado, y usted puede hacer el esquema de autenticación en un momento posterior casi sin dolor.