[16.0.0.3 und höher]

JWT-Authentifizierung für OpenID Connect

Sie können einen Liberty-Server so konfigurieren, dass er ein JWT-Token (JSON Web Token) als Authentifizierungstoken von einem vertrauenswürdigen Authentifizierungsproxy, einem vertrauenswürdigen Service-Client oder einem OAuth-Berechtigungsserver akzeptiert.

Informationen zu diesem Vorgang

Wenn Sie einen Liberty-Server so konfigurieren möchten, dass er ein JWT-Token als Authentifizierungstoken akzeptiert, aktivieren Sie das Feature openidConnectClient-1.0, legen Sie den Wert inboundPropagation="required" fest und konfigurieren Sie einen Truststore und SSL. Sie können optional eine zusätzliche JWT-Konfiguration angeben, wie beispielsweise Benutzerregistrys, Authentifizierungsfilter oder eine Zuordnung vom Typ "Anspruch zu Subjekt". Die Konfiguration für die Verwendung von JWT-Token als Authentifizierungstoken ähnelt der unter OpenID Connect-Client in Libety konfigurieren beschriebenen Prozedur.

Jede vertrauenswürdige Partei, die JWT-Token besitzt, kann dieses Token verwenden, um auf die zugeordneten Ressourcen in Liberty zuzugreifen. Der Liberty-Ressourcenserver validiert das JWT-Token und erstellt aus dem JWT-Token das authentifizierte Subjekt. Damit das JWT-Token als Authentifizierungstoken akzeptiert wird, muss es iss-, sub- und exp-Ansprüche enthalten und mit dem RS256- oder HS256-Algorithmus signiert sein. Verschlüsseltes JWT-Token wird nicht unterstützt. Das folgende Beispiel zeigt decodierte JWT-Nutzdaten:
{
	"iss":"https://idp.acme.com:8020/jwt",
	"sub":"marissa@acme.com",
	"exp":1385066178,
	"aud":"https://resource.acme.com/services",
	"iat":1385062578,
	“groupIds”: [
	    “group1”, “group2”
	 ]  
}

Vorgehensweise

  1. Fügen Sie das Liberty-Feature openidConnectClient-1.0 und alle weiteren benötigten Features zur Datei server.xml hinzu. Das Feature openidConnectClient-1.0 erfordert mindestens das Feature ssl-1.0. Fügen Sie die folgende Elementdeklaration im Element featureManager Ihrer Datei server.xml hinzu:
    <feature>openidConnectClient-1.0</feature> 	
    <feature>ssl-1.0</feature>
  2. Konfigurieren Sie ein openidConnectClient-Element und legen Sie den Wert inboundPropagation="required" fest. Informationen zu anderen openidConnectClient-Attributen finden Sie unter OpenID Connect-Client (openidConnectClient).

    Die folgende Beispielkonfiguration setzt voraus, dass der JWT-Tokenaussteller einen JWK (JSON Web Key) unterstützt und mit dem RS256-Algorithmus signiert ist.

    <openidConnectClient id="RS" inboundPropagation="required"		
      jwkEndpointUrl="https://acme.com/jwtserver/jwk" signatureAlgorithm="RS256"
      issuerIdentifier="https://idp.acme.com:8020/jwt" >		
    </openidConnectClient>
  3. Konfigurieren Sie einen Truststore, um das JWK-Endpunktzertifikat einzuschließen, damit der Liberty-Server SSL-Verbindungen zum JWK-Endpunkt herstellen kann. Truststores werden über keyStore-Elemente in der Datei server.xml konfiguriert. Nachdem Sie SSL so konfiguriert haben, dass SSL diesen Truststore referenziert, können Sie entweder die SSL-Konfiguration als SSL-Standardkonfiguration für den Server setzen oder die Truststore-ID über das sslRef-Attribut des openidConnectClient-Elements angeben.

    Wenn der JWT-Aussteller JWK nicht unterstützt und das JWT-Token stattdessen mit einem X.509-Zertifikat signiert ist, importieren Sie das X.509-Zertifikat des Ausstellers in den Truststore. Geben Sie im Element openidConnectClient die Truststore-ID über das trustStoreRef-Attribut an und referenzieren Sie das Zertifikat über das Attribut trustAliasName.

    Wenn das JWT-Token mit einem geheimen Schlüssel für gemeinsame Nutzung mit dem HMAC-SHA256-Algorithmus signiert ist, definieren Sie den geheimen Schlüssel für gemeinsame Nutzung über das Attribut sharedKey oder das Attribut clientSecret.

    Weitere Informationen zu Truststores und Keystores finden Sie unter SSL-Kommunikation in Liberty aktivieren.

  4. Konfigurieren Sie das Attribut issuerIdentifier des openidConnectClient-Elements so, dass es mit dem Anspruch iss des JWT-Ausstellers übereinstimmt.

    Wenn beispielsweise das JWT-Token "iss":"https://idp.acme.com:8020/jwt" enthält, legen Sie das Attribut wie folgt fest: issuerIdentifier="https://idp.acme.com:8020/jwt".

  5. Optional: Konfigurieren Sie eine Benutzerregistry. Standardmäßig werden verifizierte JWT-Ansprüche verwendet, um das authentifizierte Subjekt des Aufrufenden direkt zu erstellen, ohne JWT-Token einem Benutzer zuzuordnen, sodass keine Benutzerregistry erforderlich ist.

    Wenn jedoch das Attribut mapIdentityToRegistryUser des openidConnectClient-Elements auf true gesetzt ist, muss für eine erfolgreiche Authentifizierung und Berechtigung ein Benutzereintrag für die entsprechende Identität vom Berechtigungsserver zurückgegeben werden. Weitere Informationen zum Konfigurieren einer Benutzerregistry finden Sie unter Benutzerregistry in Liberty konfigurieren.

  6. Optional: Konfigurieren Sie Authentifizierungsfilter gemäß der Beschreibung unter Authentifizierungsfilter.

    Wenn Sie einen Authentifizierungsfilter konfigurieren, referenzieren Sie den Authentifizierungsfilter über das Attribut authFilterRef des openidConnectClient-Elements.

    Wenn das Element openidConnectClient nicht über ein authFilterRef-Attribut konfiguriert ist, werden alle nicht authentifizierten Anforderungsversuche mit diesem openidConnectClient-Element authentifiziert.

  7. Optional: Konfigurieren Sie den Liberty-Ressourcenserver für die Zusammenarbeit mit mehreren JWT-Ausstellern oder Authentifizierungsproxy-Servern, indem Sie mehrere openidConnectClient-Elemente und mehrere Authentifizierungsfiilter konfigurieren.

    Jedes openidConnectClient-Element definiert eine Vertrauensbeziehung mit einem JWT-Aussteller oder Authentifizierungsproxy und referenziert einen Authentifizierungsfilter.

  8. Optional: Definieren Sie Regeln für die Zuordnung von JWT-Ansprüchen zu Authentifizierungssubjekten.
    Der Liberty-Ressourcenserver verwendet JWT-Ansprüche, um Authentifizierungssubjekte zu erstellen, und Sie können die Zuordnung von JWT-Ansprüchen zum Subjekt mit den folgenden openidConnectClient-Elementattributen definieren:
    • userIdentifier
    • userUniqueIdentifier
    • groupIdentifier
    • realmName
    • realmIdentifier
    Wenn sowohl realmName als auch realmIdentifier konfiguriert sind, hat realmName Vorrang und realmIdentifier wird ignoriert.
    Wenn Sie keine Zuordnung vom Typ "Anspruch zu Subjekt" definieren, gelten die folgenden Standardzuordnungsregeln:
    • Der Subjektanspruch (sub) wird als Name des Prinzipals und als eindeutiger Sicherheitsname des Benutzers verwendet.
    • Der Ausstelleranspruch (iss) ist das Standardrealm und wird als Sujektrealm verwendet. Wenn ein realmName-Anspruch im JWT-Token eingeschlossen wird, wird der realmName-Anspruch als Subjektrealm anstelle des iss-Anspruchs verwendet.
  9. Optional: Konfigurieren Sie ein Single Sign-on-Cookie. Der Liberty-Server erwartet, dass jede Anforderung ein gültiges JWT-Token bereitstellt und erstellt keine SSO-Cookies und verwendet auch keine SSO-Cookies für die Authentifizierung. Wenn Sie SSO-Cookies erstellen möchten, legen Sie für das Element openidConnectClient den Wert authnSessionDisabled="false" fest.
  10. Optional: Konfigurieren Sie den Liberty-Server, um JWT-Token zu empfangen. Der Web-Client kann eine der folgenden Methoden zum Senden von JWT-Token in Ressourcenanforderungen an den Liberty-Ressourcenserver verwenden. Wenn das JWT-Token über das Feld Authorization oder als formal codierter Hauptteilparameter gesendet wird, ist keine zusätzliche Serverkonfiguration erforderlich.
    Wichtig: Clients dürfen nicht mehr als eine Methode in jeder Anforderung verwenden, um das Token zu übertragen. Wenn das Attribut headerName konfiguriert ist, werden Token ignoriert, die im Headerfeld Authorization oder als formal codierter Hauptteilparameter gesendet werden. Wenn das Attribut headerName nicht konfiguriert ist, wird zuerst nach dem Header Authorization gesucht, gefolgt vom Parameter access_token.
    • Senden Sie das Token wie folgt über das Anforderungsheaderfeld Authorization.
      GET /resource HTTP/1.1
      Host: server.example.com
      Authorization: Bearer mF_9.B5f-4.1JqM
    • Senden Sie das Token wie folgt im Anforderungsentitätshauptteil als formal codierter Hauptteilparameter.
      POST /resource HTTP/1.1
      Host: server.example.com
      Content-Type: application/x-www-form-urlencoded
      access_token=mF_9.B5f-4.1JqM
    • Senden Sie das Token über ein angepasstes Anforderungsheaderfeld, indem Sie einen vertrauenswürdigen Headernamen in Liberty konfigurieren.

      Legen Sie zum Konfigurieren des vertrauenswürdigen Headernamens den Wert headerName="<myJwtHeaderName>" für das Element openidConnectClient fest. Wenn Sie beispielsweise headerName="jwt" festlegen, können Sie das Token im Headerfeld jwt wie im folgenden Beispiel senden:
      GET /resource HTTP/1.1
      Host: server.example.com
      jwt: mF_9.B5f-4.1JqM
  11. Konfigurieren Sie JWT-Zielgruppen. Wenn Sie eine Liste mit vertrauenswürdigen Zielgruppen definieren möchten, konfigurieren Sie das Attribut audiences für das Element openidConnectClient.
    Ein gültiges JWT-Token muss eine der folgenden Bedingungen erfüllen:
    • Wenn das Attribut audiences konfiguriert ist, muss der Wert des Zielgruppenanspruchs (aud) zu einer der konfigurierten Zielgruppen gehören. Wenn Sie die Zielgruppenprüfung ignorieren möchten, legen Sie für audiences den Wert ALL_AUDIENCES fest.
    • Wenn das Attribut audiences nicht konfiguriert ist, das JWT-Token jedoch einen aud-Anspruch enthält, der eine gültige URL ist, muss die Ressourcenservices-URL den Wert aud als Präfix haben.
      Die folgende Zielgruppe ist z. B. gültig, weil die Ressourcen-URL mit dem Wert aud für den Anspruch beginnt:
      • Zielgruppenanspruch: "aud":"https://<Server>:<Port>/something"
      • Ressourcen-URL: https://<Server>:<Port>/something/specific
      Die folgende Zielgruppe ist nicht gültig, weil die Ressourcen-URL nicht mit dem Wert aud für den Anspruch beginnt.
      • Zielgruppenanspruch: "aud":https://<Server>:<Port>/something/specific"
      • Ressourcen-URL: https://<Server>:<Port>/something
  12. Optional: Ordnen Sie Subjekten JWT-Token programmgesteuert zu, indem Sie die SPI com.ibm.wsspi.security.oauth.UserCredentialResolver implementieren.

    Einzelheiten zu der Schnittstelle finden Sie in den Informationen zur SPI com.ibm.wsspi.security.oauth.UserCredentialResolver im Abschnitt Programmierschnittstellen (APIs und SPIs) oder in der Java-Dokumentation, die zusammen mit dem Produkt im Verzeichnis ${wlp.install.dir}/dev/spi/ibm/ bereitgestellt wird.

Ergebnisse

Sie haben die Mindestkonfiguration erstellt, die erforderlich ist, um einen Liberty-Server so zu konfigurieren, dass er JWT-Token als Authentifizierungstoken akzeptiert.

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_config_oidc_jwt
Dateiname: twlp_sec_config_oidc_jwt.html