SPNEGO-Token für J2EE-, .NET-, Java™- und Web-Service-Clients für HTTP-Anforderungen erstellen
Sie können für Ihre Anwendungen ein SPNEGO-Token (Simple and Protected GSS-API Negotiation) erstellen und dieses Tokens zur Authentifizierung gegenüber WebSphere Application Server in die HTTP-Header einfügen.
Vorgehensweise
- Erstellen Sie einen Clientberechtigungsnachweis für GSS. Wählen Sie eine der vier folgenden Optionen aus:
- Erstellen Sie einen GSS-Berechtigungsnachweis für den Kerberos-Cache für Berechtigungsnachweise. Beispiel:
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);
- Erstellen Sie einen GSS-Berechtigungsnachweis aus einem Subject mit Kerberos-Tickets. Beispiel:
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; } });
- Erstellen Sie einen GSS-Berechtigungsnachweis, nachdem Sie das Anmeldemodul WSKRB5Login aufgerufen haben. Beispiel:
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);
- Erstellen Sie einen GSS-Berechtigungsnachweis mit dem nativen Microsoft-Kerberos-Cache für Berechtigungsnachweise. Beispiel:
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);
Anmerkung: Der Berechtigungsnachweiscache "MSLSA:" stützt sich auf die Fähigkeit, das vollständige Kerberos-Ticket zu extrahieren, einschließlich des Sitzungsschlüssels aus Kerberos-LSA. In einem Versuch, die Sicherheit zu erhöhen, hat Microsoft damit begonnen, ein Feature zu implementieren, bei dem die Sitzungsschlüssel für Ticket Getting Tickets nicht mehr exportiert werden, da die Sitzungsschlüssel dadurch für IBM® JGSS unbrauchbar werden könnten, wenn versucht wird, weitere Servicetickets anzufordern. Dieses neue Features ist in Windows 2003 Server und Windows XP SP2 Beta enthalten. Microsoft stellt den folgenden Registrierungsschlüssel für die Inaktivierung dieses neuen Features zur Verfügung:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos\Parameters AllowTGTSessionKey = 0x01 (DWORD)
In Windows XP SP2 Beta 1 wird der Schlüssel wie folgt angegeben:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Kerberos AllowTGTSessionKey = 0x01 (DWORD)
- Erstellen Sie einen GSS-Berechtigungsnachweis für den Kerberos-Cache für Berechtigungsnachweise. Beispiel:
- Nachdem Sie einen Clientberechtigungsnachweis für GSS erstellt haben, können Sie das
SPNEGO-Token erstellen und wie im folgenden Beispiel in den HTTP-Header einfügen:
// Zielserver-SPN erstellen GSSName gssServerName = manager.createName(targetServerSpn, GSSName.NT_USER_NAME); GSSContext clientContext = manager.createContext(gssServerName.canonicalize(spnegoMechOid), spnegoMechOid, clientGssCreds, GSSContext.DEFAULT_LIFETIME); // Delegierung für GSS-Berechtigungsnachweis aktivieren (optional) clientContext.requestCredDeleg(true); byte[] spnegoToken = new byte[0]; // SPNEGO-Token für den Zielserver erstellen spnegoToken = clientContext.initSecContext(spnegoToken, 0, spnegoToken.length); URL url = new URL(targetUrl); HttpURLConnection con= (HttpURLConnection) url.openConnection(); try { // SPNEGO-Token in den HTTP-Header einfügen con.setRequestProperty("Authorization", "Negotiate " + Base64.encode(spnegoToken)); con.getResponseCode(); } catch (IOException e) { } catch (Exception ex) { }
Ergebnisse
Möglicherweise benötigt Ihre Anwendung eine Kerberos-Konfigurationsdatei (krb5.ini oder krb5.conf). Weitere Informationen finden Sie im Artikel Kerberos-Konfigurationsdatei erstellen.
Zugehörige Tasks:
Zugehörige Verweise:


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