estamos utilizando JAAS para habilitar el Inicio de sesión único en una aplicación Java utilizando la memoria caché de Windows Kerberos. Nuestro archivo de configuración jaas.conf se ve así:¿Cómo validar un ticket Kerberos contra un servidor en Java?
LoginJaas {
com.sun.security.auth.module.Krb5LoginModule required
useTicketCache=true
doNotPrompt=true
debug=true;
};
Con esto, podemos crear un Jaas LoginContext y obtener con éxito vale Kerberos del usuario. Enviamos este ticket a nuestra aplicación de servidor usando JMI. Sin embargo, lo que no logramos hacer es verificar en el servidor que el boleto de Kerberos fue creado por nuestro Directorio Activo.
Por el momento, hacemos una validación muy insegura del ticket simplemente comprobando si el nombre del servidor principal (KerberosTicket.getServer()) tiene nuestro nombre de dominio en la parte de dominio. Pero, por supuesto, cualquiera podría configurar un servidor Kerberos propio con el mismo nombre de dominio y usar ese ticket para iniciar la aplicación.
Una idea que encontré fue la de autenticar contra el LDAP de Active Directory utilizando el ticket de Kerberos. Desafortunadamente, utilizamos Windows 7 y reutilizar el ticket de Kerberos para autenticar contra LDAP solo funciona al establecer una entrada de Registro (consulte http://java.sun.com/j2se/1.5.0/docs/guide/security/jgss/tutorials/Troubleshooting.html, busque allowtgtsessionkey). Esto es inaceptable para nuestros usuarios.
¿Hay alguna forma de validar el ticket contra nuestro servidor de Active Directory? Sospecho que hay una forma de comprobar si el ticket KerberosTicket.getServer() es igual al ticket de nuestro servidor, pero no tengo idea de cómo hacerlo. ACTUALIZACIÓN: KerberosTicket(). GetServer() solo devuelve un KerberosPrincipal que no contiene nada más que el nombre y el dominio del ticket del servidor, por lo que no es adecuado para la validación.
Gracias por su ayuda, Memminger
¿Alguna vez descubrió esto? –