estamos utilizando JAAS para habilitar el inicio De sesión Único en una aplicación Java utilizando el Windows ticket de Kerberos caché. Nuestro jaas.conf archivo de configuración se parece a esto:

LoginJaas {
  com.sun.security.auth.module.Krb5LoginModule required
  useTicketCache=true
  doNotPrompt=true
  debug=true;
};

Con esto, podemos crear un Jaas LoginContext y conseguir que el usuario de Kerberos. Enviamos este billete a cabo la aplicación de servidor utilizando JMI. Lo que no podemos hacer es verificar en el servidor que el ticket de Kerberos, de hecho fue creado por nuestro Active Directory.

Por el momento, vamos a hacer un muy inseguro de validación del billete simplemente comprobando si el Servidor Principal (KerberosTicket.getServer()) nombre tiene nuestro nombre de dominio en el reino de la parte. Pero, por supuesto, alguien podría configurar un servidor Kerberos con el mismo nombre de su reino y el uso que de boletos para iniciar la aplicación.

Una idea que he encontrado fue para autenticar contra el LDAP de Active Directory usando el ticket de Kerberos. Por desgracia, podemos usar Windows 7 y re-utilizar el ticket de Kerberos para autenticar contra el LDAP sólo funciona cuando la creación de un Registro de entrada (ver http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html, búsqueda de allowtgtsessionkey). Esto es inaceptable para nuestros usuarios.

Es hay alguna forma de validar el billete en contra de nuestro servidor de Directorio Activo? Sospecho que hay una forma de comprobar si el KerberosTicket.getServer (la entrada es igual a la de entradas de nuestro servidor, pero no tengo idea de cómo hacerlo. ACTUALIZACIÓN: KerberosTicket().getServer() sólo devuelve un KerberosPrincipal que no contiene nada, pero el servidor de nombre del ticket y el reino, por lo que no es adecuado para su validación.

Gracias por tu ayuda,
memminger

OriginalEl autor user269667 | 2010-02-09

2 Comentarios

  1. 5

    Como usted ha mencionado, la forma correcta de resolver este problema es por kerberizing su servicio, que es el punto entero de la Kerberos (protocolo de autenticación de clientes en contra de los servidores). Billete de reutilización no funciona exactamente porque sería un problema de seguridad si lo hizo.
    Un servicio de Kerberos no es necesario que inicie sesión en Active Directory», sólo se necesita tener una clave compartida con AD.

    BTW, para obtener el SSO el uso de JAAS requiere tener que allowtgtsessionkey conjunto, no hay forma de evitar que en Windows.

    Ten en cuenta que de usuario de Active Directory nombres con caracteres latinos, no trabajo en Kerberos módulo de inicio de sesión en JAAS. Limitación significativa a menos que el sistema es de US-ASCII sólo.

    OriginalEl autor Max Caceres

  2. 2

    Como nadie parece saber realmente una respuesta a esto, supongo que tenemos que realizar un correcto servicio de Kerberos de nuestro servidor de aplicaciones. Uno que se registra en el Active Directory y que tiene el atributo ServicePrincipalName configurado correctamente. Como SPNEGO hace por HTTP. Un buen punto de partida cómo hacer que se SPNEGO filtro de Servlets en SourceForge (http://spnego.sourceforge.net/). http://thejavamonkey.blogspot.com/2008/04/clientserver-hello-world-in-kerberos.html también es un muy buen ejemplo de cómo hacer el Servicio de inicio de sesión.
    Por desgracia, esto lleva a que el mismo problema con la clave del registro, de modo que he publicado una nueva pregunta en Hay una manera en Java o una línea de comandos util para obtener un ticket de Kerberos para un servicio mediante el nativo de SSPI API?.

    ¿Alguna vez esta figura?

    OriginalEl autor user269667

Dejar respuesta

Please enter your comment!
Please enter your name here