[16.0.0.4 und höher]

JWT-Token in Liberty erstellen

Sie können JWT-Token (JSON Web Token) programmgesteuert erstellen, indem Sie das JWT-Builder-Element in der Serverkonfiguration konfigurieren und die com.ibm.websphere.security.jwt.JwtBuilder- und com.ibm.websphere.security.jwt.JwtToken-APIs in Ihren Anwendungen implementieren.

Informationen zu diesem Vorgang

Weitere Informationen zu JWT-APIs finden Sie in der JSON-Web-Token-Java-Dokumenation oder in der API-Dokumentation, die im Lieferumfang des Produkts enthalten ist und im Verzeichnis ${wlp.install.dir}/dev bereitgestellt wird.

Vorgehensweise

  1. Fügen Sie der Datei server.xml das Feature jwt-1.0 hinzu.
    <featureManager>     <feature>jwt-1.0</feature>
        ...
    </featureManager>
  2. Konfigurieren Sie den JWT-Builder, indem Sie das jwtBuilder-Element ändern.

    Weitere Informationen zu jwtBuilder-Attributen, die Sie konfigurieren können, finden Sie unter JWT-Builder (jwtBuilder).

    Wenn Sie das Feature jwt-1.0 hinzugefügt und Ihre Änderungen gespeichert haben, fügt Liberty das folgende jwtBuilder-Standardelement hinzu.
    <jwtBuilder id="defaultJWT">
    </jwtBuilder>
    In dieser Standardkonfiguration wird von den folgenden Standardwerten ausgegangen:
    • Der exp-Anspruch ist 2 Stunden nach der Erstellungszeit des Tokens. Sie können diesen Wert über das expiry-Attribut konfigurieren.
    • Der iss-Anspruch wird auf https://<Hostname>:<SSL-Port>/jwt/defaultJWT gesetzt. Konfigurieren Sie den Aussteller über das issuer-Attribut.
    • Der JWT-Token wird mit dem Algorithmus RS256 mit einem privaten Schlüssel im Standardkeystore des Servers signiert. Bei dieser Konfiguration wird davon ausgegangen, dass für den Server ein Standardkeystore konfiguriert wird, dass der Standardkeystore einen einzelnen privaten Schlüssel enthält und dass der private Schlüssel zum Signieren verwendet werden kann. Wenn Sie einen anderen Keystore über das Attribut keyStoreRef angeben, wird der private Schlüssel aus dem angegebenen Keystore verwendet. Ist das Attribut keyAlias nicht konfiguriert und enthält der Keystore nur einen einzigen privaten Schlüssel, wird der private Schlüssel in der Signatur verwendet.

    Sie können dieses jwtBuilder-Standardelement erneut konfigurieren, oder ein oder mehrere weitere jwtBuilder-Elemente erstellen. Jedes jwtBuilder-Element muss eine eindeutige, URL-konforme Zeichenfolge haben, die als id-Attribut angegeben wird. Wenn die ID fehlt, wird das jwtBuilder-Element nicht verarbeitet.

    Wenn das JWT-Token mit dem Algorithmus RS256 signiert wird, können Sie den JWT-Builder so konfigurieren, dass das JWT-Token mit JWK (JSON Web Key) signiert wird, indem Sie jwkEnabled="true" festlegen. Wenn JWK aktiviert ist, generiert der JWT-Builder Schlüsselpaare dynamisch und signiert das JWT-Token mit dem privaten Schlüssel. Der JWT-Konsument kann zum Validieren der Signatur den Schlüssel aus der JWK-API abrufen. Das Format sieht wie folgt aus:
    https://<Hostname>:<SSL-Port>/jwt/ibm/api/<jwtBuilder-Konfigurations-ID>/jwk
  3. Erstellen Sie JWT-Token programmgesteuert, indem Sie die com.ibm.websphere.security.jwt.JwtBuilder- und com.ibm.websphere.security.jwt.JwtToken-APIs in Ihre Anwendungen implementieren.

    Weitere Informationen finden Sie in der JSON-Web-Token-Java-Dokumentation.

    1. Erstellen Sie ein JwtBuilder-Objekt.
      Wenn Sie keine Konfigurations-ID angeben, wird das Objekt an die jwtBuilder-Standardkonfiguration gebunden.
      com.ibm.websphere.security.jwt.JwtBuilder jwtBuilder = JwtBuilder.create();
      Wenn Sie eine Konfigurations-ID angeben, wird das Objekt mit der angegebenen ID an die jwtBuilder-Konfiguration gebunden.
      com.ibm.websphere.security.jwt.JwtBuilder jwtBuilder = JwtBuilder.create("jwtBuilder_configuration_id");
    2. Ändern Sie die Ansprüche im Token.
      • Anspruch hinzufügen oder aktualisieren: jwtBuilder.claim("Name_des_Anspruchs", "Wert_des_Anspruchs");
        jwtBuilder.claim("role", "monitor");
      • Anspruch löschen: jwtBuilder.remove("Name_des_Anspruchs");
        jwtBuilder.remove("role");
      • Anspruch aus der eingebundenen Liberty-Benutzerregistry abrufen: jwtBuilder.fetch("Attributname");

        Mit diesem Abrufaufruf wird das JwtBuilder-Objekt aufgefordert, die eingebundene Benutzerregistry nach dem Benutzernamen zu durchsuchen, der über den sub-Anspruch des JWT-Tokens angegeben ist. Das JwtBuilder-Objekt ruft den Wert des angegebenen Attributs ab und erstellt einen neuen Anspruch basierend auf diesem Attribut. Der Name des neuen Anspruchs wird auf den Attributnamen und der Wert des neuen Anspruchs wird auf den Attributwert gesetzt.

      • Anspruch aus einem vorhandenen JWT-Token oder JSON-Objekt kopieren: jwtBuilder.claimFrom(JSON_oder_JWT-Token, "Name_des_Anspruchs");
    3. Ändern Sie den konfigurierten Signaturalgorithmus und den Signierschlüssel.
      jwtBuilder.signWith("Neuer_Algorithmus", Neuer_Schlüssel);
    4. Erstellen Sie das Token mithilfe der API com.ibm.websphere.security.jwt.JwtToken.
      JwtToken jwtToken = jwtBuilder.buildJwt();
      String jwtTokenString = jwtToken.compact();

Beispiele für JWT-APIs

Das folgende Beispiel zeigt die Erstellung eines neuen JWT-Tokens.
JwtBuilder jwtBuilder = JwtBuilder.create();
jwtBuilder.subject("tom@op.com").claim(Claims.AUDIENCE, "https://acme.com/rs").claim("iss","https://sso.com/ibm/op" ).claim("scope", "impersonator monitor").claim("uid", "hasys123haksiqws");
JwtToken goToken = jwtBuilder.buildJwt();
Das daraus resultierende JWT-Token wird mit dem privaten Standardschlüssel des Servers signiert und enthält die folgenden Ansprüche.
{
"aud": "https://acme.com/rs",
"iss": "https://sso.com/ibm/op",
"iat": 1388440863, "exp": 1388444763,
"uid": "hasys123haksiqws",
"sub": "tom@op.com",
"scope": "impersonator monitor"
}
Das folgende Beispiel erstellt das JWT-Token newToken aus einem anderen JWT-Token goToken.
JwtToken newToken = JwtBuilder.create().claim(Claims.AUDIENCE, "https://acme.com/rs").claimFrom(goToken, "sub").claim(goToken, "uid").claim(goToken, "scope").buildJwt();

Symbol das den Typ des Artikels anzeigt. Taskartikel



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