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

  1. Crear una credencial GSS de cliente. Elija una de las 4 opciones siguientes:
    1. 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);
    2. 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;
                 }
             });
    3. 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);
    4. 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.&nbsp. 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)
  2. 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 [AIX Solaris HP-UX Linux Windows]Creación de un archivo de configuración de Kerberos.


Icon that indicates the type of topic Task topic



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