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.
Schritt 1 – Konfigurieren von WSO2-IS-KM-5.7.0 als Trusted IDP in API Manager
Melden Sie sich bei der Admin-Konsole von API Manager an als Name des Identitätsanbieters ein.
Hinweis: Der im Identity Server konfigurierte Wert IDTokenIssuerID wird als Issuer-Wert im vom Identity Server generierten JWT-Token verwendet. Damit wird die richtige Identity-Provider-Konfiguration im API-Manager abgeholt, wenn er ein JWT-Token für die Oauth-Token-Generierung empfängt Standardwert für IDTokenIssuerID ist die OAuth2-Token-Endpunkt-URL. Wenn das nicht ausreicht, entfernen Sie das Kommentarzeichen in der folgenden Konfiguration und konfigurieren Sie explizit den Wert
<IDTokenIssuerID>${carbon.protocol}://${carbon.host}:${carbon.management.port}/oauth2/token</IDTokenIssuerID>
Exportieren Sie das Zertifikat von WSO2-IS-KM-5.7.0 und importieren Sie es in die IDP-Konfiguration
Exportieren: Navigieren Sie zu < WSO2-IS-KM-5.7.0 >/repository/resources/security und führen Sie folgenden Befehl aus, der das Zertifikat in die Datei wso2.crt exportiert
keytool -export -alias wso2carbon -file wso2.crt -keystore wso2carbon.jks -storepass wso2carbon
Importieren: Laden Sie nun das Zertifikat in die Trusted IDP Config hoch
IDP-Zertifikatstyp wählen -> IDP-Zertifikat hochladen
Speichern Sie die Konfiguration
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 of WSO2-IS-KM
Neuen Dienstanbieter aus dem linken Bereich hinzufügen Dienstanbieter -> Hinzufügen
Geben Sie einen Namen (z. B. Web APP) und konfigurieren Sie dann openid connect in Inbound Authentication Configuration -> OAuth/OpenID Connect Configuration
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
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
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}
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
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.