Creación de señales SPNEGO para clientes de servicios web J2EE, .NET, Java™ para solicitudes HTTP
Puede crear una señal SPNEGO (Simple and Protected GSS-API Negotiation) para sus aplicaciones e insertar esta señal en las cabeceras HTTP para autenticarse en WebSphere Application Server.
Procedimiento
- Crear una credencial GSS de cliente. Elija una de las 4
opciones siguientes:
- Crear una credencial GSS para la memoria caché de
credenciales Kerberos. Por ejemplo:
System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); Oid krb5MechOid = new Oid("1.2.840.113554.1.2.2"); Oid spnegoMechOid = new Oid("1.3.6.1.5.5.2"); GSSManager manager = GSSManager.getInstance(); GSSName gssUserName = manager.createName(userName, GSSName.NT_USER_NAME, krb5MechOid); clientGssCreds = manager.createCredential(gssUserName.canonicalize(krb5MechOid), GSSCredential.INDEFINITE_LIFETIME, krb5MechOid, GSSCredential.INITIATE_ONLY); clientGssCreds.add (gssUserName, GSSCredential.INDEFINITE_LIFETIME, GSSCredential.INDEFINITE_LIFETIME, spnegoMechOid, GSSCredential.INITIATE_ONLY);
- Crear una credencial GSS a partir de un sujeto que tiene
tickets Kerberos. Por ejemplo:
Oid krb5MechOid = new Oid("1.2.840.113554.1.2.2"); Oid spnegoMechOid = new Oid("1.3.6.1.5.5.2"); GSSManager manager = GSSManager.getInstance(); clientGssCreds = (GSSCredential) Subject.doAs(subject, new PrivilegedExceptionAction() { public Object run() throws GSSException, Exception { try { gssName = manager.createName( userName, GSSName.NT_USER_NAME, getKrb5MechOid()); GSSCredential gssCred = manager.createCredential( gssName.canonicalize(krb5MechOid), GSSCredential.DEFAULT_LIFETIME, krb5MechOid, GSSCredential.INITIATE_ONLY); gssCred.add (gssUserName, GSSCredential.INDEFINITE_LIFETIME, GSSCredential.INDEFINITE_LIFETIME, spnegoMechOid, GSSCredential.INITIATE_ONLY); return gssCred; } catch (GSSException gsse) { } catch(Exception e) { } return null; } });
- Crear una credencial GSS después de llamar al
módulo de inicio de sesión WSKRB5Login. Por ejemplo:
Oid krb5MechOid = new Oid("1.2.840.113554.1.2.2"); Oid spnegoMechOid = new Oid("1.3.6.1.5.5.2"); System.setProperty("javax.security.auth.useSubjectCredsOnly", "true"); GSSManager manager = GSSManager.getInstance(); GSSName gssUserName = manager.createName(userName, GSSName.NT_USER_NAME, krb5MechOid); clientGssCreds = manager.createCredential(gssUserName.canonicalize(krb5MechOid), GSSCredential.INDEFINITE_LIFETIME, krb5MechOid, GSSCredential.INITIATE_ONLY); clientGssCreds.add (gssUserName, GSSCredential.INDEFINITE_LIFETIME, GSSCredential.INDEFINITE_LIFETIME, spnegoMechOid, GSSCredential.INITIATE_ONLY);
- Cree una credencial GSS mediante la memoria caché de
credenciales Kerberos nativo de Microsoft. Por ejemplo:
Oid krb5MechOid = new Oid("1.2.840.113554.1.2.2"); Oid spnegoMechOid = new Oid("1.3.6.1.5.5.2"); System.setProperty("javax.security.auth.useSubjectCredsOnly", "false"); GSSManager manager = GSSManager.getInstance(); clientGssCreds = manager.createCredential(null, GSSCredential.INDEFINITE_LIFETIME, krb5MechOid, GSSCredential.INITIATE_ONLY); clientGssCreds.add(null, GSSCredential.INDEFINITE_LIFETIME, GSSCredential.INDEFINITE_LIFETIME, spnegoMechOid, GSSCredential.INITIATE_ONLY);
Nota: La memoria caché de credenciales MSLSA: depende de la capacidad de extraer todo el ticket de Kerberos, incluida la clave de sesión del LSA de Kerberos. . En un intento de aumentar la seguridad, Microsoft ha empezado a implementar una característica mediante la que ya no se exportan las claves de sesión para Ticket Getting Tickets, lo que puede causar que ya no sean útiles para IBM® JGSS cuando se realizan intentos de solicitar tíquets de servicio adicionales. Esta nueva característica se ha visto en Windows 2003 Server y Windows XP SP2 Beta. Microsoft ha proporcionado la siguiente clave de registro para inhabilitar esta nueva característica:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters AllowTGTSessionKey = 0x01 (DWORD)
En Windows XP SP2 Beta 1, la clave se especifica como se indica a continuación:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos AllowTGTSessionKey = 0x01 (DWORD)
- Crear una credencial GSS para la memoria caché de
credenciales Kerberos. Por ejemplo:
- Una vez que haya creado una credencial GSS de cliente, podrá
crear la señal SPNEGO e insertarla en la cabecera HTTP como se
indica en el siguiente ejemplo:
// crear SPN de servidor de destino GSSName gssServerName = manager.createName(targetServerSpn, GSSName.NT_USER_NAME); GSSContext clientContext = manager.createContext(gssServerName.canonicalize(spnegoMechOid), spnegoMechOid, clientGssCreds, GSSContext.DEFAULT_LIFETIME); // habilitar opcionalmente la delegación de credenciales GSS clientContext.requestCredDeleg(true); byte[] spnegoToken = new byte[0]; // crear una señal SPNEGO para el servidor de destino spnegoToken = clientContext.initSecContext(spnegoToken, 0, spnegoToken.length); URL url = new URL(targetUrl); HttpURLConnection con= (HttpURLConnection) url.openConnection(); try { // insertar señal SPNEGO en la cabecera HTTP con.setRequestProperty("Authorization", "Negotiate " + Base64.encode(spnegoToken)); con.getResponseCode(); } catch (IOException e) { } catch (Exception ex) { }
Resultados
Es posible que su aplicación necesite un archivo de
configuración de Kerberos (krb5.ini o krb5.conf). Para obtener más información, consulte
Creación de un archivo de configuración de Kerberos.
Tareas relacionadas:
Referencia relacionada:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_SPNEGO_token
File name: tsec_SPNEGO_token.html