SAML-HoK-Token mit der API erstellen

Das SAML-HoK-Token (Holder-of-Key) erweitert die öffentliche Schnittstelle in WebSphere Application Server und kann als Schutztoken verwendet werden. WebSphere Application Server stellt eine API der SAML-Bibliothek zum Erstellen von SAML-HoK-Token bereit.

Informationen zu diesem Vorgang

Für die SAML-Tokenerstellung sind drei Parameter erforderlich:
  • com.ibm.wsspi.wssecurity.saml.config.RequesterConfig
  • com.ibm.wsspi.wssecurity.saml.config.ProviderConfig
  • com.ibm.wsspi.wssecurity.saml.config.CredentialConfig
Befolgen Sie die Schritte zum Erstellen einer Instanz für jeden Parameter, und erstellen Sie anschließend ein SAML-HoK-Token (HoK = holder-of-key). Als Alternative zu "CredentialConfig" können Sie auch "javax.security.auth.Subject" verwenden. Weitere Informationen hierzu finden Sie in der API-Dokumentation.

Vorgehensweise

  1. Erstellen Sie eine Instanz von "com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory" und verwenden Sie dabei die SAML-Tokenversion als Parameter. Die unterstützten SAML-Tokenversionen sind "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" und "http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0". Die Instanz der "SAMLTokenFactory" ist ein Singleton daher sicher für Threads. Verwenden Sie je nach Tokenversion eine der folgenden Codezeilen, um die Instanz zu erstellen.
    • Verwenden Sie die folgende Codezeile, um eine Instanz von "com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory" für ein SAML-Token der Version 1.1 SAML zu erstellen:
      SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);
    • Verwenden Sie die folgende Codezeile, um eine Instanz von "com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory" für ein SAML-Token der Version 2.0 SAML zu erstellen:
      SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token20);
  2. Die Instanz der "SAMLTokenFactory" wird verwendet, um eine Instanz des Objekts "RequesterConfig" zu erstellen, die entsprechend den Authentifizierungsvoraussetzungen des Requesters festlegt, wie das Token generiert wird. Abhängig davon, ob das Token einen geheimen Schlüssel (einen symmetrischen Schlüssel) oder einen öffentlichen Schlüssel verwenden soll, verwenden Sie eine der nachfolgend aufgeführten Codezeilen, um eine Instanz des Objekts "RequesterConfig" zu erstellen.
    • Verwenden Sie die folgende Codezeile, um für das SAML-HoK-Token unter Verwendung eines geheimen Schlüssels (eines symmetrischen Schlüssels), der in die Subjektbestätigung ("SubjectConfirmation") aufgenommen wird, eine Standardinstanz von "RequesterConfig" zu erstellen:
      RequesterConfig reqData = samlFactory. newSymmetricHolderOfKeyTokenGenerateConfig ();
      Sie können außerdem den Schlüsselalias für den Zielservice festlegen, damit der Provider den geheimen Schlüssel für den Service verschlüsseln kann:
      reqData.setKeyAliasForAppliesTo("SoapRecipient");
    • Verwenden Sie die folgende Codezeile, um für das SAML-HoK-Token unter Verwendung eines öffentlichen Schlüssels, der in die Subjektbestätigung ("SubjectConfirmation") aufgenommen wird, eine Standardinstanz von "RequesterConfig" zu erstellen:
      RequesterConfig reqData = samlFactory. newAsymmetricHolderOfKeyTokenGenerateConfig ();
      Sie können außerdem den Schlüsselalias für den Requester festlegen, damit der Provider den öffentlichen Schlüssel aus dem Requester abrufen und in die Subjektbestätigung ("SubjectConfirmation") aufnehmen kann:
      reqData.setKeyAliasForRequester(“SOAP Initiator”);
    Die Standardinstanz von "RequestConfig" reicht aus, um ein einfaches HoK-Token zu generieren. Durch Anpassen der "RequestConfig"-Instanz können aber weitere Zusicherungen in das SAML-Token aufgenommen werden. Um beispielsweise Informationen zur Kennwortauthentifizierung in das Token aufzunehmen, verwenden Sie die Methode "setAuthenticationMethod":
    reqData.setAuthenticationMethod(“password”);
  3. Erstellen Sie mit der "SAMLTokenFactory" eine Instanz des Objekts "ProviderConfig", die den Tokenaussteller beschreibt. Die "ProviderConfig"-Instanz legt den SAML-Ausstellernamen sowie Informationen zu Keystore und Truststore fest, die den Schlüssel für die SAML-Verschlüsselung und -Signatur angeben. Die "ProviderConfig"-Instanz wird mit Eigenschaftswerten aus einer Eigenschaftendatei erstellt. Die Eigenschaftendatei gibt den Standardwert des Objekts "ProviderConfig" an. In einer Java™-Clientumgebung wird diese Eigenschaftendatei von der JVM-Systemeigenschaft "com.ibm.webservices.wssecurity.platform.SAMLIssuerConfigDataPath" definiert.
    In der Laufzeitumgebung von WebSphere Application Server lautet der Name der Eigenschaftendatei "SAMLIssuerConfig.properties". Die Datei kann sich entweder unter dem Konfigurationsverzeichnis auf Serverebene oder unter dem Verzeichnis auf Zellenebene (in dieser Reihenfolge) befinden. Im Folgenden sehen Sie ein Beispiel für einen Pfad auf Serverebene:
    Stammverzeichnis_des_Anwendungsservers/profiles/$PROFILE/config/cells/$CELLNAME/nodes/$NODENAME/servers/$SERVERNAME/SAMLIssuerConfig.properties
    Im Folgenden sehen Sie ein Beispiel für einen Pfad auf Zellenebene:
    Stammverzeichnis_des_Anwendungsservers/profiles/$PROFILE/config/cells/$CELLNAME/sts/SAMLIssuerConfig.properties

    Die JVM-Systemeigenschaft "com.ibm.webservices.wssecurity.platform.SAMLIssuerConfigDataPath" wird ignoriert, wenn die Eigenschaft in der Serverlaufzeitumgebung definiert wird. Eine ausführliche Beschreibung aller Eigenschaften finden Sie in den Informationen zur Konfiguration eines SAML-Tokens während der Tokenerstellung.

    Verwenden Sie die folgende Codezeile, um eine Instanz des Objekts "ProviderConfig" zu erstellen:

    ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(“Name_des_Ausstellers”);
    Der Name des Ausstellers ist optional. Wenn der Name des Ausstellers angegeben wird, erscheint er in der SAML-Zusicherung. Wird der Name des Ausstellers nicht angegeben, wird ein Standardname für den Aussteller aus der Datei "SAMLIssuerConfig.properties" verwendet.
  4. Optional: Wenn Sie ein neues SAML-Token erstellen, verwendet die "SAMLTokenFactory" entweder ein JAAS-Subjekt oder eine "CredentialConfig"-Instanz, um das neue SAML-Token zu füllen. Wenn ein JAAS-Subjekt verwendet werden soll, um das Token zu füllen, rufen Sie die API "com.ibm.websphere.security.auth.WSSubject getCallerSubject()" oder die API "getRunAsSubject()" auf, um ein JAAS-Subjekt zu erhalten, das den anfordernden Client darstellt, oder die Identität des Ausführungs-Threads.

    Wenn Sie das JAAS-Subjekt verwenden, um ein neues SAML-Token zu erstellen, durchsucht die "SAMLTokenFactory" die "PrivateCredentials"-Subjektliste nach einem "SAMLToken"-Objekt. Wenn ein "SAMLToken"-Objekt existiert, werden die "NameId" oder "NameIdentifier" in das neue SAML-Token kopiert. Außerdem kopiert die "SAMLTokenFactory" die SAML-Attribute und die Authentifizierungsmethode ("AuthenticationMethod") aus dem vorhandenen SAML-Token in das neue SAML-Token. Das neue SAML-Token enthält einen neuen Namen des Ausstellers, neue Signaturzertifikate, die Bestätigungsmethode, neue Schlüsselinformationen ("KeyInfo") für die Bestätigungsmethode "holder-of-key" und neue Bedingungen des Typs "NotBefore" und "NotOnAfter". Diese Tokeneinstellungen werden von Konfigurationsparametern in den Objekten "ProviderConfig" und "RequesterConfig" festgelegt.

    Wenn im Subjekt kein "SAMLToken"-Objekt existiert, wird nur der Principal-Name "WSPrincipal" aus dem Subjekt in das neue SAML-Token kopiert. Keine anderen Attribute im Subjekt werden in das neue SAML-Token kopiert. Auf die gleiche Weise werden der Name des Ausstellers, das Signaturzertifikat, die Bestätigungsmethode, Schlüsselinformationen ("KeyInfo") für "holder-of-key" und die Bedingungen "NotBefore" und "NotOnAfter" von den Konfigurationsparametern in den Objekten "ProviderConfig" und "RequesterConfig" bestimmt.

    Alternativ dazu können Sie die Methode "RunAsSubject" für den Ausführungs-Thread verwenden, um das SAML-Token zu erstellen. Bei Verwendung dieser Methode sollten Sie das JAAS-Subjekt bzw. das Objekt "CredentialConfig" nicht an die "SAMLTokenFactory" übergeben, um das SAML-Token zu erstellen. Statt dessen wird der Inhalt des vorhandenen SAML-Tokens wie bereits beschrieben in das neue SAML-Token kopiert.

    Eine weitere Methode zum Erstellen eines SAML-Tokens besteht darin, unter Verwendung des Objekts "CredentialConfig" die SAML-Namens-ID ("NameID") und -Attribute programmgesteuert zu füllen. Diese Methode sollte in folgenden Situationen verwendet werden:
    • In das neue SAML-Token müssen angepasste SAML-Attribute aufgenommen werden.
    • Das SAML-Token wird nicht mit der "SAMLTokenFactory" erstellt, damit es aus einem JAAS-Subjekt automatisch gefüllt wird, sondern das SAML-Token wird manuell erstellt.
    • Im Subjekt ist kein SAML-Token vorhanden.
    • Es ist kein JAAS-Subjekt verfügbar.

    Verwenden Sie die folgende Codezeile, um ein "CredentialConfig"-Objekt ohne Verwendung des JAAS-Subjekts zu erstellen:

    CredentialConfig cred = samlFactory.newCredentialConfig ();
    Für dieses "CredentialConfig"-Objekt wird kein Anfangswert bereitgestellt, daher müssen Sie das Objekt mit Setter-Methoden füllen.
    Zum Füllen der "NameIdentifier" oder "NameID" für SAML verwenden Sie die folgende Codezeile:
    cred.setRequesterNameID("beliebiger Name");
    Der Wert der Variablen beliebiger Name wird im SAML-Token als Name des Principals verwendet. Der Name wird in Zusicherungen als "NameIdentifier" in einem SAML-Token der Version 1.1 oder als "NameId" im SAML-Token der Version 2.0 angezeigt. Wenn der Wert von beliebiger Name z. B. Alice ist, wird in einem SAML-Token der Version 1.1 die folgende Zusicherung generiert:
    <saml:NameIdentifier>Alice</saml:NameIdentifier>
    In einem SAML-Token der Version 2.0 wird die folgende Zusicherung generiert:
    <saml2:NameID>Alice</saml2:NameID> 

    Verwenden Sie folgenden Code, um SAML-Attribute in den Abschnitt <AttributeStatement> einer Zusicherung aufzunehmen:

    SAMLAttribute samlAttribute = new SAMLAttribute("email" /* Name*/, new String[] {"joe@websphere"}
    /*Attributwerte*/, null, "IBM WebSphere-Namespace" /* Namespace*/, "E-Mail-Adresse" /* Format*/, "joe" /*aussagekräftiger Name*/);
    ArrayList<SAMLAttribute> al = new ArrayList<SAMLAttribute>();
    al.add(samlAttribute)
    sattribute = new SAMLAttribute("Membership", new String[] {"Super users", "Gold membership"}, null, null /* format*/, null, null );
    al.add(samlAttribute );
    cred.setSAMLAttributes(al);
    Dieser Beispielcode generiert die folgenden <Attribute>-Zusicherungen:
    <saml:Attribute AttributeName="email" NameFormat="email" AttributeNamespace="IBM WebSphere namespace">
    <saml:AttributeValue>joe@websphere</saml:AttributeValue>
    </saml:Attribute>
    <saml:Attribute AttributeName="Membership">
    <saml:AttributeValue>Super users</saml:AttributeValue><saml:AttributeValue>Gold membership</saml:AttributeValue>
    </saml:Attribute>
  5. Erstellen Sie mit der folgenden Codezeile ein SAML-HoK-Token:
    SAMLToken samlToken = samlFactory.newSAMLToken(cred, reqData, samlIssuerCfg);
    Für diese Methode ist die Java-Sicherheitsberechtigung "wssapi.SAMLTokenFactory.newSAMLToken" erforderlich. Im Abschnitt mit den Beispielen finden Sie vollständige Codebeispiele, die die Codezeilen aus den vorherigen Schritten enthalten:

Beispiel

Verwenden Sie diesen Beispielcode, um ein SAML-HoK-Token der Version 1.1 unter Verwendung eines geheimen Schlüssels (eines symmetrischen Schlüssels) aus dem Subjekt zu erstellen.
import com.ibm.wsspi.wssecurity.saml.config.RequesterConfig;
import com.ibm.wsspi.wssecurity.saml.config.ProviderConfig;
import com.ibm.wsspi.wssecurity.saml.config.CredentialConfoig ; 
import com.ibm.websphere.wssecurity.wssapi.token.SAMLTokenFactory 

SAMLTokenFactory samlFactory = SAMLTokenFactory.getInstance(SAMLTokenFactory.WssSamlV11Token11);

RequesterConfig reqData  =  samlFactory.newSymmetricHolderOfKeyTokenGenerateConfig();

//"AppliesTo" dem Schlüsselalias zuordnen, damit die Bibliothek weiß, wie der
// symmetrische Schlüssel verschlüsselt werden soll
reqData.setKeyAliasForAppliesTo("SOAPRecipient"); 

ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(IsserUri);

Subject subject =  com.ibm.websphere.security.auth.WSSubject.getRunAsSubject(); 

SAMLToken samlToken = samlFactory.newSAMLToken(subject, reqData, samlIssuerCfg);
Verwenden Sie diesen Beispielcode, um ein SAML-HoK-Token der Version 2.0 unter Verwendung eines öffentlichen Schlüssels aus dem Subjekt zu erstellen:
// Benutzerausdruck, der festlegt, wie SAML erstellt werden soll, Standardeinstellung wird angegeben
RequesterConfig reqData =  samlFactory.newAsymmetricHolderOfKeyTokenGenerateConfig();

//Öffentlichen Schlüssel auswählen, der in SAML aufgenommen werden soll
reqData.setKeyAliasForRequester("SOAPInitiator"); 

//Keystore des Ausstellers abrufen, damit die Zusicherung signiert oder
// verschlüsselt werden kann, Name des Ausstellers
ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig("any_issuer");

//JAAS-Subjekt abrufen, damit die Factory Principal und Attribute für SAML füllen kann
Subject subject =  com.ibm.websphere.security.auth.WSSubject.getRunAsSubject(); 

SAMLToken samlToken = samlFactory.newSAMLToken(subject, reqData, samlIssuerCfg);
Verwenden Sie diesen Beispielcode, um ein SAML-HoK-Token der Version 2.0 unter Verwendung eines geheimen Schlüssels (eines symmetrischen Schlüssels) zu erstellen.
SAMLTokenFactory samlFactory =  SAMLTokenFactory.getInstance (SAMLTokenFactory.WssSamlV20Token11);

RequesterConfig reqData = samlFactory. newSymmetricHolderOfKeyTokenGenerateConfig ();
//"AppliesTo" dem Schlüsselalias zuordnen, damit die Bibliothek weiß, wie der
// symmetrische Schlüssel verschlüsselt werden soll
reqData.setKeyAliasForAppliesTo("SOAPRecipient"); 

ProviderConfig samlIssuerCfg = samlFactory.newDefaultProviderConfig(null);

CredentialConfig cred = samlFactory.newCredentialConfig ();
cred.setRequesterNameID("any_name"); 

SAMLToken samlToken = samlFactory.newSAMLToken(subject, reqData, samlIssuerCfg);

Symbol, das den Typ des Artikels anzeigt. Taskartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_createholderofkeytoken
Dateiname:twbs_createholderofkeytoken.html