Dieses Tutorial zeigt Ihnen, wie Sie einem vorhandenen nativen OAuth-Anbieter mithilfe von API Manager die OIDC-Fähigkeit ( OpenID Connect) hinzufügen können.
Info zu diesem Tutorial
OpenID Connect ist ein Authentifizierungsprotokoll, das zusammen mit OAuth den Benutzerzugriff auf Ressourcen steuert. Wenn
Sie OAuth verwenden, um die Berechtigungen eines Benutzers zu bestimmen, können Sie zusätzlich OIDC verwenden, um den Benutzer
mithilfe von JSON Web Tokens (JWT) zu authentifizieren.
Vorbereitende Schritte
In diesem Tutorial werden die vordefinierte API "FindBranch" und ein bereits vorhandener nativer OAuth-Provider verwendet, der
mit dem Erteilungstyp "Zugriffscode" konfiguriert ist. Führen Sie die folgenden Tasks aus, um Ihre Umgebung für
dieses Tutorial vorzubereiten:
- Fügen Sie den Gateway-Dienst DataPower® API Gateway zum Sandbox-Katalog hinzu, wie unter Erstellen und Konfigurieren von Katalogen beschrieben.
Der
Sandbox-Katalog muss für die Verwendung mindestens eines Gateways konfiguriert sein. Für dieses Tutorial müssen Sie dasselbe Gateway verwenden, das die
API "FindBranch" verwendet.
- Importieren Sie die FindBranch -API und aktivieren Sie sie wie im Tutorial: Importieren einer API erläutert.
- Erstellen Sie den nativen OAuth-Anbieter MyNativeOAuthProvider, wie im Tutorial: Implementieren der OAuth-Sicherheit erläutert.
OIDC-Funktionalität zu einem nativen OAuth-Provider hinzufügen
Führen Sie die folgenden
Schritte aus, um OIDC-Sicherheit zu einem nativen OAuth-Provider hinzuzufügen:
- Öffnen Sie den OAuth-Provider zum Bearbeiten:
- Melden Sie sich bei API Manager an.
- Klicken Sie auf der Homepage auf die Kachel Ressourcen verwalten.
- Klicken Sie in der Navigationsliste "Ressourcen" auf OAuth-Provider.
- Klicken Sie in der Liste der OAuth-Provider auf MyNativeOAuthProvider, um den Provider zu öffnen.
- Klicken Sie in der Navigationsliste Native OAuth Provider bearbeiten auf OpenID Connect.

- Wählen Sie auf der Seite OpenID Connect die Option Enable OIDC (OIDC aktivieren).

- Wenn in der Liste Hybridantworttypen unterstützen auf der Seite Einstellungen ausgewählt sind, deaktivieren Sie die Auswahl.
- Wählen Sie OIDC-API-Assembly automatisch generieren aus.
Diese Option aktualisiert Ihre API mit dem
Ablauf für OIDC.

Eine Warnung wird angezeigt, dass Sie
entweder ein ID-Token-Signierverschlüsselungsobjekt oder einen ID-Token-Signierschlüssel angeben müssen. In diesem Tutorial
werden Sie im nächsten Schritt einen JWK-Schlüssel angeben.
- Klicken Sie auf
, um den folgenden Schlüssel zu kopieren, und fügen Sie ihn dann in das Feld ID-Token-Signierschlüssel ein:{ "alg": "HS256", "kty": "oct", "use": "sig", "k": "o5yErLaE-dbgVpSw65Rq57OA9dHyaF66Q_Et5azPa-XUjbyP0w9iRWhR4kru09aFfQLXeIODIN4uhjElYKXt8n76jt0Pjkd2pqk4t9abRF6tnL19GV4pflfL6uvVKkP4weOh39tqHt4TmkBgF2P-gFhgssZpjwq6l82fz3dUhQ2nkzoLA_CnyDGLZLd7SZ1yv73uzfE2Ot813zmig8KTMEMWVcWSDvy61F06vs_6LURcq_IEEevUiubBxG5S2akNnWigfpbhWYjMI5M22FOCpdcDBt4L7K1-yHt95Siz0QUb0MNlT_X8F76wH7_A37GpKKJGqeaiNWmHkgWdE8QWDQ", "kid": "hs256-key" }
Dieser Schlüssel ist nicht sicher und ist nur für die Verwendung in diesem Tutorial vorgesehen.
- Wählen Sie im Feld Signierschlüsselalgorithmus für ID-Token die Option HS256 als
Signaturalgorithmus für diesen Schlüssel aus.

- Klicken Sie auf Speichern.
OIDC-Sicherheit testen
Hinweis: Aufgrund von CORS-Beschränkungen (Cross-Origin Resource Sharing) kann das Assembly-Test-Tool nicht mit den Browsern Chrome oder Safari auf der Catalina-Plattform macOS verwendet werden.
Wenn Sie die neue OIDC-Sicherheit im API-Manager-Testbereich testen, führen Sie dieselben Schritte aus, die Sie für das Testen des nativen OAuth-Anbieters verwendet haben. In der Anzeige "Test" erscheint das JWT-Token, das
mit dem Zugriffstoken empfangen wird, nicht, sodass Sie in diesem Tutorial das JWT-Token mit cURL-Befehlen abrufen,
damit Sie überprüfen können, ob das Token zurückgegeben wird.
- Konfigurieren Sie die Anzeige "Test" für das Aufrufen Ihrer API:
- Klicken Sie auf der Seite Develop / findbranch in der Kopfzeile der Seite auf die Registerkarte Test.
Die importierte FindBranch API hat bereits eine Definition, die eine einzige Richtlinie namens Invoke zur Ausführung der API verwendet. Diese API kann getestet werden.
- Um die API zu aktivieren, klicken Sie auf Zielkonfiguration.

- Aktivieren Sie im Fenster Einstellungen die Option Automatische Veröffentlichung, um den API-Status auf online zu setzen.

- Klicken Sie auf Senden.

- Wenn die Meldung Keine Antwort erhalten erscheint, klicken Sie auf Server öffnen.

Eine neue Browserregisterkarte wird geöffnet. Wenn eine Fehlermeldung erscheint, ignorieren Sie sie.
- Wechseln Sie zu einem Befehlsfenster und verwenden Sie cURL-Befehle, um das Zugriffstoken und das JWT-Token zu erhalten, die
Ihnen die Verwendung der API ermöglichen:
Hinweis: Der Autorisierungscode, den Sie vom OAuth-Anbieter erhalten, läuft nach ein paar Minuten ab. Um zu vermeiden, dass die Anforderung wiederholt werden muss, bereiten Sie die beiden Befehle für diesen Schritt so
weit wie möglich vor, bevor Sie den ersten Befehl ausführen.
- Führen Sie den folgenden cURL-Befehl aus, um einen Berechtigungscode für die API anzufordern:
curl -k -i --header "Authorization: Basic dXNlcjpwYXNz"\
--request GET "Authorization_URL\
?redirect_uri=https://example.com/redirect\
&scope=openid+details\
&response_type=code\
&client_id=Client_ID"
Dabei gilt:
- Der cURL-Parameter
-k ermöglicht cURL, Ihre Operation auch für unsichere Serververbindungen auszuführen.
- Der cURL-Parameter
-i enthält Protokollantwortheader in der Ausgabe, sodass Sie die Antwort im
Befehlsfenster anzeigen können.
- Der Berechtigungsheader gibt an, dass Sie sich über die Benutzerregistry (die AuthURL-Benutzerregistry, die Sie erstellt
haben) mithilfe einer Basisauthentifizierung authentifizieren werden, und gibt das Kennwort ("pass") in der Base64-Codierung an.
- Die
Authorization_URL wird aus der Anzeige "Test" kopiert.
- Der
redirect_uri ist die OAuth-Umleitungs-URL, die Sie in der Sandbox-Test-App konfiguriert haben.
- Die
scope gibt zwei Bereiche an, die mit +
verkettet sind: den Bereich der API details , auf den Sie zugreifen werden, und den OIDC-Bereich, der Sie autorisiert.
- Die
response_type ist code , weil Sie einen Autorisierungscode erhalten möchten.
- Die
Client_ID wird aus dem Identifikationsbereich
des Testpanels kopiert und stellt sicher, dass Sie auf Ihre Sandbox-Test-App zugreifen können.
Beispiel:
curl -k -i --header "Authorization: Basic dXNlcjpwYXNz"\
--request GET "https://example.com/eb-org/sandbox/mynativeoauthprovider/oauth2/authorize\
?redirect_uri=https://example.com/redirect\
&scope=openid+details\
&response_type=code\
&client_id=01c43d1620e0c4e6ded0dec20b5655d9"
Die Antwort ähnelt dem folgenden Beispiel:
HTTP/1.1 302 Found
Connection: Keep-Alive
Transfer-Encoding: chunked
X-RateLimit-Limit: name=default,100;
X-RateLimit-Remaining: name=default,93;
User-Agent: curl/7.55.1
Accept: */*
X-Client-IP: IP_address
X-Global-Transaction-ID: 12df8d855e7e18ee00000681
Location: https://example.com/redirect? code=AALxLnKixp9VIy3PvVKBwfbuTgNbwnZtHB6iS9b_BUw39UZZjUi2CeFdPYJZW0mgqNMtzFUhrsfu3FFiC9aGfHnJ3CqdIANqlo-v-DkQv7ELWw
Content-Type: text/xml
Date: Fri, 27 Mar 2020 15:17:02 GMT
- Kopieren Sie den Berechtigungscode (der im Parameter
code zurückgegeben wurde), damit Sie ihn im nächsten
Schritt verwenden können.
- Führen Sie den folgenden cURL-Befehl aus, um den Berechtigungscode gegen ein Zugriffstoken und ein JWT-Token auszutauschen:
curl -k -i --header "Content-Type: application/x-www-form-urlencoded"\
--request POST "Token_URL"\
--data-urlencode "code=Authorization_code"\
--data-urlencode "client_secret=Client_Secret"\
--data-urlencode "grant_type=authorization_code"\
--data-urlencode "scope=openid details"\
--data-urlencode "client_id=Client_ID"
Dabei gilt:
- Die
Token_URL wird aus der Anzeige "Test" kopiert.
- Der
Authorization_code wird aus der Antwort auf den vorherigen Befehl kopiert.
- Der
Client_Secret (geheime Clientschlüssel) wird aus dem Abschnitt "Identifikation" der
Anzeige "Test" kopiert.
- Der
grant_type ist "authorization_code".
- Der
scope gibt erneut zwei Bereiche an (in diesem Befehl durch ein Leerzeichen getrennt, da die Werte in
Anführungszeichen eingeschlossen sind).
- Der
Client_ID (geheime Clientschlüssel) wird aus dem Abschnitt "Identifikation" der
Anzeige "Test" kopiert.
Beispiel:
curl -k -i --header "Content-Type: application/x-www-form-urlencoded"\
--request POST "https://example.com/eb-org/sandbox/mynativeoauthprovider/oauth2/token"\
--data-urlencode "code=AAJ8zz5SvYgxFw0zY0fOxAOiDeaw_PLR6dAFh-ojXVjv-80TB25VGfj28J4Jf7jzgaWVVfLQuVTRSfUbp2hDjYsX9QmZHJOg5p_bfHFWBlQlLg"\
--data-urlencode "client_secret=d6634763de6c612ae69636d0fc948650"\
--data-urlencode "grant_type=authorization_code"\
--data-urlencode "scope=openid details"\
--data-urlencode "client_id=01c43d1620e0c4e6ded0dec20b5655d9"
Die Antwort ähnelt dem folgenden Beispiel:
{"token_type":"Bearer", "access_token":"AAIgMDFjNDNkMTYyMGUwYzRlNmRlZDBkZWMyMGI1NjU1ZDkm4gPMmFjgv2XXhI7t6LZ8BcIRaO_LvWirsNDlirJWi_7qqKGp_fr5py7yE_fHoD17ajAUJPPuUjsV5xj7go25JQjk_smS-AYvmPXRi99IxQ" ,"scope":"openid details","expires_in":3600,"consented_on":1585322249, "id_token":"eyJraWQiOiJoczI1Ni1rZXkiLCJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI3NjE2OTRiYS1iYjYzLTRlNWQtOTc1ZS04NThkZGYxMmI2ZTkiLCJpc3MiOiJJQk0gQVBJQ29ubmVjdCIsInN1YiI6InVzZXIiLCJhdWQiOiIwMWM0M2QxNjIwZTBjNGU2ZGVkMGRlYzIwYjU2NTVkOSIsImV4cCI6MTU4NTMyNTg1MiwiaWF0IjoxNTg1MzIyMjUyLCJhdF9oYXNoIjoibDZYRDV5SjVuMTU1MkZSV19pR2k2USJ9.IO1RVPWV5zOhYGmCXUvG0_-9OO0guURPwaEbGOqCpCg" }
Die Antwort enthält zwei Token: das Zugriffstoken und das JWT (mit der Bezeichnung id_token
). Durch das Empfangen dieser Tokens
wird bestätigt, dass Sie für die Verwendung von OIDC und Ihres nativen OAuth-Providers authentifiziert sind.
Hinweis: Wenn Sie eineInvalid requestmit einer Fehlermeldung über einen abgelaufenen Code antworten, bedeutet dies, dass der Autorisierungscode abgelaufen ist. Kehren Sie zum Unterschritt "a" zurück und wiederholen Sie den Prozess, um einen neuen
Berechtigungscode zu erhalten, und tauschen Sie ihn dann schnell für das Zugriffstoken und das JWT-Token ein.
- Kehren Sie zum Testbereich zurück und klicken Sie auf Senden, um die API auszuführen.
Sie
müssen keine Codes in die Anzeige "Test" einfügen, da Sie cURL zum Austausch von Tokens mit API Connect verwendet haben.
Die Antwort der FindBranch API zeigt den Statuscode200
OKund die Kopfdaten der Antwort, und der Textkörper enthält die Daten für jede Bankfiliale.

Die Themen dieses Tutorials
In diesem Tutorial haben Sie die folgenden Aktivitäten durchgeführt:
- Hinzufügen von OIDC-Sicherheit zu einer vorhandenen API.
- Testen der Sicherheit durch manuelles Anfordern eines Berechtigungscodes und Austauschen des Codes gegen ein Zugriffstoken plus ein JWT-Token vor dem Aufruf der API.