info@yenlo.com
deu
Menu
WSO2 API Manager 5 min

Eine Anleitung in 6 Schritten für den JWT-Austausch mit OAuth2

Jenanathan Yogendran
Jenanathan Yogendran
Integration Consultant
yenlo blog 2020 05 25 jwt exchange 600x350

Eine serverbasierende Webanwendung verwendet WSO2 Identity Server zur Authentifizierung. Die Authentisierung wird mit OpenID connect durchgeführt. Sobald ein Endbenutzer authentifiziert ist, muss die Webanwendung im Namen des angemeldeten Benutzers auf einige im API-Manager veröffentlichte APIs zugreifen. APIs im API Manager sind geschützt und um auf die APIs zugreifen zu können, muss die Webanwendung ein OAuth2-Token für das JWT-Token erhalten, das sie im Anmeldeschritt erhalten hat.

WSO2 API Manager unterstützt verschiedene OAuth2-Berechtigungstypen wie Passwort, Client-Anmeldedaten, Code, JWT usw. Da die Web-App so konfiguriert ist, dass sie OpenID connect für die Anmeldung nutzt, wird sie das signierte JWT-Token vom WSO2 Identity Server erhalten. Deshalb kann der JWT-Token-Grant-Typ verwendet werden, um das OAuth-Token zu generieren, indem das im Anmeldefluss empfangene JWT-Token ausgetauscht wird.

Um das Beispiel in diesem WSO2-Tutorial auszuführen, müssen die folgenden Voraussetzungen gegeben sein: WSO2 API Manager 2.6.0, WSO2 Identity Server als Schlüsselmanager 5.7.0, Anleitung zum Konfigurieren von Identity Server als Key Manager.

wp identity and access management
Whitepaper Die Identity Und Access Management Auswahlhilfe

Möchten Sie Ihr Identitäts- Und Zugangsmanagement Gleich Von Anfang An Richtig Regeln?

Jetzt herunterladen

Schritt 1 – Konfigurieren von WSO2-IS-KM-5.7.0 als Trusted IDP in API Manager

yenlo_blog_2020-05-25_jwt-exchange-with-oauth2_figure-1

Melden Sie sich bei der Admin-Konsole von API Manager an yenlo_blog_2020-05-25_jwt-exchange-with-oauth2_figure-4

Schritt 2 – Konfigurieren Sie den Service Provider in WSO2-IS-KM für die Anmeldung der Web-App

Melden Sie sich an der Verwaltungskonsole des Identity Servers an yenlo_blog_2020-05-25_jwt-exchange-with-oauth2_figure-5

Call Back-URL: Web-App-URL, an die die Open-Id Connect-Antwort vom IS gesendet werden soll.

Audience Restriction aktivieren: Token-Endpunkt-Alias, der beim Erstellen des vertrauenswürdigen IDP im API-Manager angegeben wurde.

Hinweis: Audience Restriction URLs sind Teil des vom IS generierten JWT-Tokens.

Schritt 3 – API veröffentlichen und abonnieren

Erstellen Sie eine einfache API zum Testen im Publisher

Gehen Sie zum Store und erstellen Sie eine neue App
yenlo_blog_2020-05-25_jwt-exchange-with-oauth2_figure-6
Hinweis: Achten Sie darauf, dass der Gewährungstyp JWT ausgewählt ist

Abonnieren Sie nun die API für die erstellte Anwendung

Schritt 4 – Benutzeranmeldung und ID-Token (JWT) abrufen

yenlo_blog_2020-05-25_jwt-exchange-with-oauth2_figure-7

Hinweis: Die OpenID connect-Anmeldung kann unterschiedliche Grant-Typen verwenden. In diesem Beispiel wird davon ausgegangen, dass die Web-App Trusted ist und Zugriff auf die Benutzeranmeldedaten hat, und sie verwendet den Passwort-Grant, um sich anzumelden und OpenID connect-Tokens zu erhalten.

Abfrage: Abrufen des Consumer Key und des Consumer Key von dem in Schritt 2 erstellten Service Provider „WebAPP“. Benutzername und Passwort sollten die Anmeldedaten eines Benutzers sein, der sich bei der Web APP anmeldet (verfügbar im IS userstore)curl -k -u <consumer-kery>:<consumer-secret> -d "grant_type=password&username=<username>&password=<password>&scope=openid"  https://<is-km>:9443/oauth2/token

Rückmeldung: Die Antwort enthält ein JWT-Token (id_token), das im nächsten Schritt zur Erzeugung eines OAuth-Tokens verwendet wird.{"access_token":"a5a335e6-a025-322d-bb9a-f9497ab47ffc","refresh_token":"99e5a365-64eb-32b2-b084-4939b9e21f47","scope":"openid","id_token":"<xxxxxxx>","expires_in":2320} 

yenlo_blog_2020-05-25_jwt-exchange-with-oauth2_figure-10

Schritt 5 – OAuth-Token für JWT-Token (id_token-Return) mit JWT-Grant generieren

Der Benutzer hat sich nun bei der Web-App angemeldet und die Web-App hat das JWT-Token als OpenID-Connect-Antwort erhalten. Jetzt muss die Web-App im Namen des Benutzers auf die im API-Manager veröffentlichte API zugreifen.

Also muss die Web-App zuerst ein gültiges OAuth-Token erhalten, indem sie das erhaltene JWT-Token mit dem JWT-Grant-Typ austauscht, indem sie den Token-Endpunkt in APIM aufruft.

Abfrage: Rufen Sie den Consumer Key und das Consumer Secret von der App ab, die in Schritt 3 im API-Store erstellt wurde. Verwenden Sie den JWT-Grant-Typ, um das Token anzufordern. Benutzen Sie das im vorherigen Schritt erhaltene id_token für die Assertion.curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' -u <consumer-key>:<consumer-secret> -k -d 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=<id_token>' https://<apim>:8243/token  curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' -u <consumer-key>:<consumer-secret> -k -d 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=<id_token>' https://<apim>:8243/token 

Rückmeldung: Enthält OAuth-Zugriffstoken, das für den Zugriff auf die API verwendet werden kann, die eine bestimmte App abonniert hat.{"access_token":"12c13079-9819-3676-ad64-6e46176a6607","refresh_token":"84a86921-b816-3a3a-94bf-6ea7c99cb376","scope":"default","token_type":"Bearer","expires_in":1886} 

Schritt 6 – API aufrufen

Benutzen Sie das in Schritt 5 erhaltene Zugriffstoken, um auf die veröffentlichte API zuzugreifen

yenlo_blog_2020-05-25_jwt-exchange-with-oauth2_figure-13

curl -k -X GET "https://<apim>:8243/test/1/" -H "accept: application/json" -H "Authorization: Bearer 12c13079-9819-3676-ad64-6e46176a6607"

Fehlerbehebung

Fehler beim Aufruf des Token-Endpunkts mit JWT-Grant-Typ.{"error_description":"None of the audience values matched the token. Endpoint Alias https://xxxxxx:9443/oauth2/token","error":"invalid_grant"}

Dieser Fehler tritt auf, da die URL in der Audience Restriction des Dienstanbieters, der das JWT-Token generiert, nicht mit dem Token Endpoint Alias übereinstimmt, der in der Trusted IDP-Konfiguration in API Manager angegeben ist. Aktualisieren Sie zur Behebung die Konfigurationen mit der korrekten URL entsprechend.

Sollten Sie Fragen zu den in diesem Blog beschriebenen Schritten haben, schreiben Sie bitte einen Kommentar unten. Bitte kontaktieren Sie uns für weitere Informationen zu unseren Support-Services.

deu
Schließen
Was ist auf unserer Speisekarte