Puede utilizar un inicio de sesión único para las solicitudes HTTP utilizando
la autenticación web SPNEGO (Simple and Protected GSS-API Negotiation Mechanism) para WebSphere Application
Server Liberty. El inicio de sesión único SPNEGO permite a los usuarios HTTP iniciar una sesión
en un controlador de dominio de Microsoft® sólo una vez en su escritorio y lograr el
inicio de sesión único (SSO) con el servidor de Liberty.
Antes de empezar
Configure el software siguiente y asegúrese de que haya disponible:
- Un Microsoft Windows®
Server que ejecute un controlador de dominio de Active Directory y un centro de
distribución de claves (KDC) de Kerberos asociado. En este tema, un host de ejemplo
para un controlador de dominio de este tipo es myAdMachine.example.com.
El nombre del controlador de dominio es mydomain.example.com y el nombre
del reino Kerberos es MYDOMAIN.EXAMPLE.COM, que es el nombre del
controlador de dominio en letras mayúsculas.
- Un miembro de dominio (cliente) de Microsoft
Windows® que dé soporte al mecanismo de autenticación SPNEGO tal como se
define en IETF RFC 2478. Un ejemplo de un cliente adecuado puede ser un navegador moderno
o un cliente Microsoft .NET. La mayoría de
navegadores modernos dan soporte a la autenticación SPNEGO. En este tema, un host de
ejemplo para el cliente es myClientMachine.example.com.
- Una plataforma de servidor con un servidor de Liberty que tenga un recurso protegido en una aplicación. Los usuarios en Active Directory deben poder acceder
a los recursos protegidos del servidor de Liberty utilizando un mecanismo de autenticación de servidor de Liberty nativo. En este tema, un host del servidor
de Liberty de ejemplo es myLibertyMachine.example.com.
Nota: La configuración de software debe tener un controlador de dominio en ejecución, al menos
una máquina cliente en dicho dominio y una plataforma de servidor con un servidor de Liberty que tenga un recurso
protegido en una aplicación, lo que hace un total de tres máquinas necesarias. No se da
soporte al uso directo de SPNEGO desde el controlador de dominio.
Nota: Asegúrese
de que los relojes del cliente, Microsoft
Active Directory Server y el servidor de Liberty estén sincronizados con 5 minutos de diferencia como máximo entre sí de forma predeterminada. La diferencia permitida en
la sincronización puede configurarse.
Nota: Sólo están soportados actualmente
los JDK de IBM®. Los JDK que no son de IBM no están
soportados.
Acerca de esta tarea
El objetivo de esta tarea es permitir a los usuarios acceder correctamente a
los recursos del servidor de Liberty sin tener que
autenticarse de nuevo, y así lograr la prestación de inicio de sesión único del
escritorio de Microsoft Windows®.
Esta
tarea muestra cómo configurar un servidor de Liberty para dar soporte al inicio
de sesión único para las solicitudes HTTP utilizando la autenticación web SPNEGO.
Procedimiento
- En el controlador de dominio de Microsoft
(myAdMachine.example.com), cree un nombre de principal de
servicio (SPN) de Kerberos y el archivo de tabla de claves para el servidor de
Liberty. :
- Cree una cuenta de usuario para el servidor de Liberty.
Esta cuenta se utiliza para correlacionarse con el nombre
principal del servicio (SPN) Kerberos. Para máquinas de Active
Directory, esta creación de cuenta se puede realizar, normalmente,
yendo a
, pulsando con el
botón derecho en Usuarios en el panel y
seleccionando
. Este
tema da por supuesto que el usuario
myLibertyMachine_http se ha creado con la contraseña
security.
- Ejecute el mandato setspn de
Microsoft para correlacionar la cuenta de
usuario con un SPN de Kerberos. Esta cuenta de usuario representa el servidor de
Liberty como un servicio de Kerberos con el KDC. Un ejemplo del mandato setspn:
C:\> setspn -a HTTP/myLibertyMachine.example.com myLibertyMachine_http
Registering ServicePrincipalNames for CN=myLibertyMachine_http,CN=Users,DC=MYDOMAIN,DC=EXAMPLE,DC=COM
HTTP/myLibertyMachine.example.com
Updated object
Nota: Si el mandato setspn de
Microsoft da soporte a la opción
-S, debe utilizar la opción -S en lugar de -A.
- Cree el archivo de tabla de claves de Kerberos utilizando la herramienta
ktpass de Microsoft.
El
nombre predeterminado de este archivo es krb5.keytab.
Un ejemplo del mandato ktpass:
C:\> ktpass -out krb5.keytab -princ HTTP/myLibertyMachine.example.com@MYDOMAIN.EXAMPLE.COM -mapUser myLibertyMachine_http -mapOp set -pass security -crypto RC4-HMAC-NT -ptype KRB5_NT_PRINCIPAL
Targeting domain controller: myAdMachine.MYDOMAIN.EXAMPLE.COM
Using legacy password setting method
Successfully mapped HTTP/myLibertyMachine.example.com to myLibertyMachine_http.
Key created.
Output keytab to krb5.keytab:
Keytab version: 0x502
keysize 93 HTTP/myLibertyMachine.example.com@MYDOMAIN.EXAMPLE.COM ptype 1 (KRB5_NT_PRINCIPAL) vno 3 etype 0x17 (RC4-HMAC) keylength 16 (0x148d643db283327d3f3d44547da8cade)
Asegúrese de que no hay ningún SPN duplicado en el bosque
Microsoft utilizando
uno de estos mandatos:
- Si el mandato setspn de
Microsoft da soporte a la opción
-X para buscar un SPN duplicado, utilice setspn -X:
C:\>setspn -X HTTP/myLibertyMachine.example.com
Processing entry 0
found 0 group of duplicate SPNs.
- También puede utilizar el mandato ldif de Microsoft.
El siguiente ejemplo muestra que se ha devuelto una entrada, lo que significa que no hay
un SPN duplicado.
C:\>ldifde -f check_SPN.txt -t 3268 -d "" -l servicePrincipalName -r "
(servicePrincipalName=HTTP/myLibertyMachine.example.com)" -p subtree
Connecting to "myAdMachine.MYDOMAIN.EXAMPLE.COM"
Logging in as current user using SSPI
Exporting directory to file check_SPN.txt
Searching for entries...
Writing out entries.
1 entries exported
Para obtener información sobre cómo crear SPN y archivos de tabla de claves en
distintos sistemas KDC, consulte
Creación de un nombre principal del servicio Kerberos y un archivo de tabla de claves.
- En la máquina del servidor de Liberty
(myLibertyMachine.example.com), habilite los archivos
de configuración y tabla de claves de Kerberos, y la autenticación web SPNEGO.
- Copie el archivo de tabla de claves de Kerberos desde el controlador de dominio en la
máquina del servidor de Liberty. El nombre predeterminado de este archivo es
krb5.keytab y la ubicación predeterminada varía en función de la
plataforma, pero es el mismo directorio que el del archivo de configuración de Kerberos. Para ver las ubicaciones predeterminadas para las distintas plataformas, consulte el paso
siguiente.
- Cree un archivo de configuración de Kerberos.
El archivo de configuración Kerberos contiene
información de configuración de cliente. Esta información incluye
las ubicaciones de KDC para los reinos de interésl los valores
predeterminados para el reino Kerberos actual y correlaciones de
nombres de host en reinos Kerberos. Para los servidores de Liberty, debe crear este archivo manualmente.
Aquí aparece un archivo de configuración Kerberos de ejemplo para
las plataformas AIX,
z/OS, HP-UX o Solaris
(basándose en la ubicación predeterminada de la tabla de claves).
[libdefaults]
default_realm = MYDOMAIN.EXAMPLE.COM
default_keytab_name = FILE:/etc/krb5/krb5.keytab
default_tkt_enctypes = rc4-hmac
default_tgs_enctypes = rc4-hmac
forwardable = true
renewable = true
noaddresses = true
clockskew = 300
udp_preference_limit = 1
[realms]
MYDOMAIN.EXAMPLE.COM = {
kdc = myAdMachine.example.com:88
default_domain = example.com
}
[domain_realm]
.example.com = MYDOMAIN.EXAMPLE.COM
Nota: Los nombres de reino se especifican normalmente en mayúsculas. Si
está utilizando Microsoft
Active Directory, los nombres de reino deben estar en mayúsculas.
Nota: No todas los soluciones KDC disponibles dan soporte a todos los tipos de cifrado. Antes
de elegir un tipo de cifrado, asegúrese de que KDC soporta el
tipo de cifrado que desea utilizar consultando la Guía de
administrador y usuario de Kerberos.
Asegúrese de que tiene un tipo de cifrado común para el archivo de configuración de
Kerberos, el archivo de tabla de claves de Kerberos, el SPN de Kerberos y el cliente de
Kerberos. Por ejemplo, si el cliente de Kerberos utiliza el tipo
de cifrado RC4-HMAC, el servidor de destino también debe dar soporte al
tipo de cifrado RC4-HMAC, y el archivo de configuración de Kerberos debe
mostrar RC4-HMAC primero en los parámetros
default_tgt_enctypes y default_tkt_enctypes.
Para obtener más información y ver los requisitos del contenido de este
archivo, consulte
Creación
de un archivo de configuración de Kerberos.
- Verifique los archivos de tabla de claves y configuración de Kerberos.
Después del mandato kinit, puede utilizar el
mandato klist para listar el tíquet de
Kerberos. Si obtiene el tíquet de
Kerberos, los archivos de configuración y de tabla de claves de Kerberos son válidos.
- Configure y habilite la autenticación web SPNEGO en el servidor de
Liberty.
Puede habilitar la autenticación web SPNEGO habilitando la
característica spnego-1.0 de Liberty
.
- Añada la característica spnego-1.0 al archivo
server.xml.
<featureManager>
<feature>spnego-1.0</feature>
<feature>appSecurity-2.0</feature>
...
</featuremanager>
La adición de la característica
spnego-1.0 impone automáticamente una configuración mínima determinada. No es necesario que especifique un elemento <spnego> en el
archivo server.xml.
Si no especifica un elemento
<spnego>, la siguiente configuración es implícita.
<spnego
canonicalHostName="true"
disableFailOverToAppAuthType="true"
trimKerberosRealmNameFromPrincipal="true"
includeClientGSSCredentialInSubject="true" />
Nota: El tiempo de
ejecución forma el SPN predeterminado con el formato siguiente:
"HTTP/" + java.net.InetAddress.getLocalHost().getCanonicalHostName();
Si el SPN predeterminado no coincide con lo que hay en el archivo
krb5.keytab, debe especificar servicePrincipalNames, por ejemplo:
<spnego id="mySpnego" servicePrincipalNames="HTTP/myLibertyMachine.example.com"/>
Nota: Cuando
la característica spnego-1.0 está habilitada y el elemento
<spnego> se omite o no se ha configurado con un atributo
authFilterRef, todas las solicitudes para acceder a los recursos
protegidos utilizan la autenticación SPNEGO.
Si desea más
información sobre cómo configurar el filtro de autenticación,
consulte
Filtros de autenticación.
Nota: Cuando no se proporcionan los valores para los atributos krb5Config o
krb5Keytab, cada archivo respectivo se espera que exista en la
ubicación predeterminada. Las ubicaciones predeterminadas para los
archivos de tabla de claves y de configuración de Kerberos en
diversas plataformas se han `proporcionado anteriormente
en este ejemplo.
- Opcional: especifique las opciones de configuración adicionales, según sea necesario. El
Liberty soporta muchos escenarios y configuraciones de SPNEGO
comunes. Por
ejemplo, puede filtrar las solicitudes HTTP para requerir la autenticación SPNEGO sólo para
determinadas solicitudes, aplicaciones web, hosts o agentes de usuarios.
Asimismo, puede
cambiar los archivos de tabla de claves y configuración de Kerberos de sus ubicaciones
predeterminadas respectivas. Aquí aparece una configuración de
ejemplo que cambia los valores predeterminados de
<spnego>:
<server>
<featureManager>
<feature>spnego-1.0</feature>
<feature>appSecurity-2.0</feature>
...
</featureManager>
...
<authFilter id="myAuthFilter">
<host id="myHost" name="example.com" matchType="contains" />
<webApp id="myWebApp" name="protectedApp" matchType="equals" />
</authFilter>
<spnego id="mySpnego"
includeClientGSSCredentialInSubject="false"
krb5Config="${server.config.dir}/resources/security/kerberos/krb5.conf"
krb5Keytab="${server.config.dir}/resources/security/kerberos/krb5.keytab"
servicePrincipalNames="HTTP/myLibertyMachine.example.com"
authFilterRef="myAuthFilter" />
</spnego>
...
</server>
Con esta configuración, se utiliza la autenticación SPNEGO
para todas las solicitudes que se reciben que contienen el nombre de host
example.com para los recursos dentro de la aplicación web
protectedApp. Asimismo, las credenciales GSS del cliente no se añaden al
sujeto de usuario cuando la autenticación es correcta. Por último, a los archivos de tabla
de claves y de configuración de Kerberos que utilizará el servidor se les proporcionan
ubicaciones específicas dentro del directorio de configuración del servidor, en lugar de sus
ubicaciones predeterminadas respectivas.
Si desea más opciones
de configuración, consulte
El
mecanismo SPNEGO (Simple and Protected GSS-API Negotiation).
Para obtener información sobre la correlación de nombres de principal de Kerberos
con ID de registro de usuarios de WebSphere, consulte
Correlación
de un nombre de principal Kerberos del cliente con el ID de registro de usuarios de WebSphere.
En
el caso excepcional de que desee utilizar nombres principales de
Kerberos para la autorización,
consulte
Utilización del nombre de principal de Kerberos para la autorización con la autenticación SPNEGO. Estos pasos sólo deben seguirse cuando sea necesario y para los
usuarios que opten específicamente por no utilizar la correlación predeterminada o la
correlación de módulo de inicio de sesión predeterminado JAAS.
- Configure la aplicación cliente en la máquina de la aplicación cliente
(myClientMachine.example.com).
Los pasos siguientes sólo deben ejecutarse en la máquina cliente. Iniciar un
navegador en la máquina de Active Directory o la máquina del servidor de Liberty y
realizar estos pasos no funcionará.
Los pasos siguientes son para los usuarios que acceden a recursos protegidos por SPNEGO
desde un navegador. Debe tener instalado un navegador que dé soporte a la autenticación
SPNEGO.
Microsoft Internet
Explorer:
- En el escritorio, inicie una sesión en el dominio de
Windows Active Directory.
- En la ventana Internet Explorer, pulse
. En la ventana que aparece, pulse la pestaña Seguridad.
- Seleccione el icono Intranet local y pulse
Sitios....
- Si está utilizando Internet Explorer versión 9 o anterior,
vaya al paso siguiente. Si está utilizando Internet Explorer 10 o
posterior, pulse Avanzado en la ventana
Intranet local.
- En la ventana Intranet local, complete el campo Agregar este sitio web a la
zona de: con la dirección web del nombre de host para que el inicio de sesión
único (SSO) pueda habilitarse para la lista de sitios web que aparecen en el campo Sitios web. El personal de tecnología de la información del sitio le proporciona esta información. Cierre la segunda ventana Intranet local y pulse Aceptar
para completar este paso y cerrar la ventana Intranet local.
- En la ventana Opciones de Internet, pulse la pestaña
Opciones avanzadas y desplácese hasta los valores de Seguridad. Asegúrese de que el recuadro Habilitar autenticación integrada de Windows®
esté seleccionado.
- Pulse Aceptar. Reinicie Microsoft Internet Explorer para activar esta
configuración.
Mozilla Firefox:
- En el escritorio, inicie una sesión en el dominio de
Windows Active Directory.
- En el campo de dirección de Firefox, escriba about:config.
- En el recuadro Filtrar/Buscar, escriba network.n.
- Efectúe una doble pulsación en
network.negotiate-auth.trusted-uris.
Esta preferencia lista los
sitios que pueden participar en la autenticación SPNEGO con el navegador. Escriba una
lista de dominios de confianza o URL delimitada por comas.
Nota: Debe establecer el valor
de network.negotiate-auth.trusted-uris.
- Si la solución SPENGO desplegada está utilizando la característica de Kerberos
avanzada de delegación de credenciales, efectúe una doble pulsación en
network.negotiate-auth.delegation-uris.
Esta preferencia lista los
sitios para los que el navegador puede delegar la autorización de usuarios al servidor. Escriba una lista de dominios de confianza o URL delimitada por comas.
- Pulse Aceptar. La configuración refleja las actualizaciones.
- Reinicie el navegador Firefox para activar esta configuración.
Nota: El usuario debe haber iniciado una sesión en el controlador de dominio para que
SPNEGO funcione. Utilizando las máquinas de ejemplo anteriores, un usuario debe iniciar
una sesión en el controlador de dominio en MYDOMAIN.EXAMPLE.COM\username para que la autenticación SPNEGO a través
del navegador funcione.
Nota: Si se le solicita varias veces un ID de usuario y una contraseña, asegúrese de
haber habilitado el soporte SPNEGO en el navegador del cliente siguiendo las
instrucciones anteriores. También debe comprobar que el atributo
disableFailOverToAppAuthType en la configuración
<spnego> se haya establecido en false.
Resultados
El navegador de Internet está ahora configurado correctamente para la
autenticación SPNEGO. Puede utilizar aplicaciones con los recursos protegidos que se
despliegan en los servidores de Liberty sin que se le solicite un ID de usuario
y una contraseña.
Para verificar que SPNEGO funciona correctamente, puede iniciar una
sesión en el controlador de dominio y a continuación acceder a un recurso protegido en el servidor de
Liberty y, como ha iniciado una sesión en el controlador de dominio, no se
le solicitarán credenciales. Sin embargo, si no inicia una sesión en el controlador de
dominio e intenta acceder a un recurso protegido, se le solicitarán credenciales.