¿Cómo usar 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 Java de escritorio?


Me gustaría tener mi aplicación Java de escritorio para tener inicio de sesión único relacionado con Usuarios de Active Directory. En dos pasos, me gustaría :

  1. Asegúrese de que el usuario en particular ha iniciado sesión en Windows con alguna entrada de usuario.
  2. Consulte alguna información de configuración para ese usuario en Active Directory

Con Java: Forma Programática de Determinar el Usuario Actual de Windows Puedo obtener el nombre del usuario actual de Windows, pero ¿puedo confiar en eso? Creo que el

System.getProperty("user.name")

No será lo suficientemente seguro? ("user.name" parece que se obtiene de variables de entorno, así que no puedo confiar en eso, creo?)

Pregunta Autenticarse en Active Directory con Java en Linux me proporciona la autenticación para el nombre de pila+pase, pero me gustaría autenticarme en función del 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.

Author: Community, 2009-02-13

8 answers

No está soportado. Java 6 tiene mejoras, pero aún no lo suficiente.

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

Mira http://java.sun.com/developer/technicalArticles/J2SE/security / . Busque "Access Native GSS-API" y habla de una nueva propiedad del sistema sol.seguridad.jgss.nativo que cuando se establece en true hace que Java use la implementación de GSS del sistema operativo subyacente, lo que da acceso a la autenticación a nivel de sistema operativo. ¡Perfecto!.... excepto que solo es compatible con Solaris y Linux, no con Microsoft Windows.

Java 6 sin embargo 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 cliente de escritorio que todavía está incompleto.

 13
Author: Alan Kent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-06 02:11:31

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

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 puede el esquema de autenticación en un momento posterior con casi ningún dolor.

 5
Author: James Schek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-13 15:14:27

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

 4
Author: dB.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-15 13:19:22

Este artículo de Sun, y esta biblioteca de código abierto podría ser capaz de obtener lo que necesita.

 2
Author: Pat Gonzalez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-16 09:12:59

Solo para el beneficio de otros leyendo este hilo, http://www.javaactivedirectory.com/?page_id=196 tiene un ejemplo sobre cómo iniciar sesión única con Windows/Active Directory

 2
Author: Satish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-15 17:15:45

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

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

 0
Author: aldrinleal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-13 12:01:54

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

Puede llamar al método win32 GetCurrentUser documentación MSDN en http://msdn.microsoft.com/en-us/library/ms724432 (VS.85).aspx. Se encuentra 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 se puede cambiar, por lo que puede ser engañoso de usar.

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

Pero sí, solo una idea:)

 0
Author: guyumu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-13 13:02:22

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

 0
Author: Bogdan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-02-13 15:24:45