JSON Web Token (JWT)

JSON Web Tokens (JWT) sind ein offener Standard, der in der JSON Web Token (JWT) Specification RFC 7519 definiert ist. Sie stellen sicher Ansprüche zwischen zwei Parteien dar. Ansprüche können sich auf jeden Geschäftsprozess beziehen, werden jedoch normalerweise verwendet, um eine Identität und ihre Assoziationen darzustellen. Beispielsweise gehört ein Benutzer, dessen Identität das JWT darstellt, zu einer Administratorrolle oder -gruppe.

Eine Einführung in JWT finden Sie unter JWT (RFC 7519).

Die Ansprüche in einem JWT werden als JSON-Objekt codiert und normalerweise mit einem Message Authentication Code (MAC) digital signiert. Das häufigste Szenario für die Verwendung eines JWT ist die Authentifizierung. Wenn der Benutzer angemeldet ist, enthält jede nachfolgende Anforderung das JWT, das dem Benutzer den Zugriff auf die durch dieses Token zugelassenen Dienste ermöglicht.

Um zu sehen, welcheCICS® Zugriffsmethoden unterstützen JWT, siehe Welche Authentifizierungsmethode kann ich mit welcher Zugriffsmethode nutzen? .

Warum JWT verwenden?

Die Verwendung von JWTs bietet unter anderem folgende Vorteile:
  • Sie sind leichtgewichtig und können von Client-Anwendungen, beispielsweise mobilen Anwendungen, einfach verwendet werden.
  • Sie sind in sich geschlossen, was bedeutet, dass der Liberty-JVM-Server das Token direkt nutzen und einen Anspruch aus dem Token als Identität zum Ausführen der Anforderung verwenden kann.
  • Sie können mithilfe des HMAC-Algorithmus symmetrisch mit einem gemeinsamen Geheimnis oder asymmetrisch mithilfe eines privaten Schlüssels signiert werden.
  • Sie haben einen integrierten Ablaufmechanismus.
  • Sie können so erweitert werden, dass sie angepasste Ansprüche enthalten.
  • Sie werden von verschiedenen Single Sign-On-Lösungen und bekannten Standards übernommen, wie zum Beispiel Wie es funktioniert:OpenID Verbinden .

Bestandteile eines JWT

Abbildung 1 zeigt, dass ein JWT aus drei Teilen besteht: einem Header, einer Nutzlast und einer Signatur.
Kopfzeile
Der Header besteht normalerweise aus zwei Teilen: dem Typ des Tokens (JWT) und dem verwendeten Algorithmus (z. B. HMAC).SHA256 oder RSASHA256 . Es istBase64Url codiert, um den ersten Teil des JWT zu bilden.
Nutzdaten
Die Nutzlast enthält die Ansprüche. Es gibt eine Reihe registrierter Ansprüche, zum Beispieliss (Aussteller),exp (Ablaufzeit),sub (Betreff) undaud (Publikum). Diese Angaben sind nicht zwingend erforderlich, werden jedoch empfohlen, um einen Satz nützlicher, interoperabler Angaben bereitzustellen. Die Payload kann auch zusätzliche Attribute enthalten, die benutzerdefinierte Ansprüche definieren, wie z. B. die Rolle des Mitarbeiters. In der Regel wird der Anspruch "subject" verwendet, um das OpenID Connect-Benutzersubjekt zu erstellen. Der Liberty-JVM-Server kann jedoch für die Verwendung eines alternativen Anspruchs konfiguriert werden. Die Nutzlast beträgtBase64Url codiert, um den zweiten Teil des JWT zu bilden.
Signatur
Um den Signaturteil zu erstellen, werden der codierte Header und die codierte Nutzlast mithilfe des Signaturalgorithmus aus dem Header signiert. Mithilfe der Signatur wird überprüft, ob der Herausgeber des JWT derjenige ist, der er vorgibt zu sein, und sichergestellt, dass die Nachricht unterwegs nicht verändert wurde.
Abb. 1. Bestandteile eines JWT
Bestandteile eines JWT
Figur 2 zeigt einen typischen JWT-Authentifizierungsfluss.
  1. Der Benutzer meldet sich mit seinen Anmeldeinformationen an.
  2. Wenn der Benutzer authentifiziert ist, wird ein JWT erstellt und an den Benutzer zurückgegeben.
  3. Wenn der Benutzer auf eine geschützte Ressource zugreifen möchte, sendet die Client-Anwendung das JWT, in der Regel im HTTP.
  4. Das JWT wird dann vom Anwendungsserver verwendet, beispielsweiseCICS , um den Benutzer zu identifizieren und den Zugriff auf die Ressource zu ermöglichen.
Abbildung 2: JWT-Authentifizierungsablauf
JWT-Authentifizierungsablauf

Unterstützung für JWT inCICS Freiheit

Ein JWT kann zur Identitätsverbreitung verwendet werden mitCICS Freiheit. Wenn der Anspruchsgegenstand eine verteilte Identität enthält, können SieCICS Freiheit zur Abbildung der verteilten Identität auf eineRACF® Benutzer-ID. Sie können die JWT-Authentifizierung mit einem Liberty-JVM-Server auf verschiedene Arten konfigurieren. Zu den gängigsten zählen:
  • OpenID Connect Client (OIDC)-Funktion

    CICS Liberty unterstütztOpenID Verbinden1.0 . Du kannst den ... benutzenopenidConnectClient-1.0 Funktion zum Konfigurieren eines Liberty-JVM-Servers, damit dieser ein JWT als Authentifizierungstoken akzeptiert. Weitere Informationen finden Sie unter Wie es funktioniert:OpenID Verbinden .

  • JWT-Funktion

    Die Freiheitjwt-1.0 Die Funktion bietet eine Reihe von APIs, die Sie zum Arbeiten mit JWTs verwenden können. Sie können die Funktion verwenden, um ein JWT zu erstellen oder zu nutzen.

  • Unternehmens-Java Security API

    Die Enterprise Java™ Security API ist eine Enterprise Java Standard Service Provider API, die die Implementierung von Authentifizierungsmechanismen und Identitätsspeichern in Enterprise Java Webanwendungen ermöglicht. Sie können einen benutzerdefinierten HTTP -Authentifizierungsmechanismus entwickeln, der eine Anfrage authentifiziert, die ein JWT verwendet.

  • Java Authentication Service Provider Interface for Containers (JASPIC)

    JASPIC ist eine Enterprise Java Standard Service Provider-API, die die Implementierung von Authentifizierungsmechanismen in Enterprise Java-Webanwendungen ermöglicht. Sie können einen benutzerdefinierten JASPIC-Authentifizierungsanbieter entwickeln, der eine Anforderung authentifiziert, die ein JWT verwendet.

  • TAI (Trust-Association-Interceptor)

    Ein Trust Association Interceptor (TAI) ist einWebSphere® proprietäre Serviceprovider-API, die die Integration von Sicherheitsdiensten Dritter ermöglicht. Sie können einen TAI implementieren, der HTTP auf ein bestimmtes Sicherheitstoken, z. B. ein JWT, überprüft und dieses validiert. CICS muss für die Verwendung des implementierten TAI konfiguriert werden.

Empfehlung : Wenn Sie unverschlüsselte JWTs verwenden, wird dringend empfohlen, HTTPS für die Übertragung von Anfragen zu verwenden, die ein JWT enthalten.

Unterstützung für JWT inCICS

CICS unterstützt nur JWTs erstellt vonRACF . Mit dieser Funktion können Sie grundlegende Authentifizierungsdaten eines Benutzers in ein JWT konvertieren, das dann als zeitlich begrenztes sicheres Sitzungstoken verwendet wird. Sie können dieses sichere Token bei nachfolgenden Anfragen validieren, indem Sie dasCICS API-Befehl,VERIFY TOKEN . Diese Unterstützung kann auch verwendet werden, um ein MFA-Token in ein JWT zu konvertieren, um die Verwendung von MFA-Token bei zustandslosen Anforderungen zu unterstützen, die Anmeldeinformationen zwischenspeichern. Passwörter, Passphrasen, MFA-Token undPassTickets sind alle unterstützten Anmeldeinformationen.

Wenn Sie HTTPS oder SOAP-Anfragen benötigen, um ein von RACF erstelltes JWT zu akzeptieren, müssen Sie benutzerdefinierte Header schreiben.

Das folgende Diagramm zeigt ein Szenario, in dem grundlegende Authentifizierungsdaten für nachfolgende Anfragen in ein JWT konvertiert werden.user ist die Benutzer-ID undpw ist das Passwort.

Abb. 3 Konvertieren grundlegender Authentifizierungsdaten in ein JWT
Dieses Diagramm zeigt einen Anwendungsfall von JWT, bei dem für die erste Anforderung grundlegende Authentifizierungsdaten verwendet werden. Bei den nachfolgenden Anfragen wird ein JWT verwendet, das aus den grundlegenden Authentifizierungsdaten konvertiert wurde.