Tutorial: OIDC-Sicherheit implementieren

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.

In diesem Tutorial schließen Sie die folgenden Lerneinheiten ab:
  1. OIDC-Funktionalität zu einem nativen OAuth-Provider hinzufügen
  2. OIDC-Sicherheit testen

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:

  1. 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.

  2. Importieren Sie die FindBranch -API und aktivieren Sie sie wie im Tutorial: Importieren einer API erläutert.
  3. 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:
  1. Öffnen Sie den OAuth-Provider zum Bearbeiten:
    1. Melden Sie sich bei API Manager an.
    2. Klicken Sie auf der Homepage auf die Kachel Ressourcen verwalten.
      Kachel Ressourcen verwalten
    3. Klicken Sie in der Navigationsliste "Ressourcen" auf OAuth-Provider.
    4. Klicken Sie in der Liste der OAuth-Provider auf MyNativeOAuthProvider, um den Provider zu öffnen.
      Neuer OAuth-Anbieter
  2. Klicken Sie in der Navigationsliste Native OAuth Provider bearbeiten auf OpenID Connect.OIDC-Formular
  3. Wählen Sie auf der Seite OpenID Connect die Option Enable OIDC (OIDC aktivieren).

    OIDC-Formular

  4. Wenn in der Liste Hybridantworttypen unterstützen auf der Seite Einstellungen ausgewählt sind, deaktivieren Sie die Auswahl.
  5. Wählen Sie OIDC-API-Assembly automatisch generieren aus.

    Diese Option aktualisiert Ihre API mit dem Ablauf für OIDC.

    Einstellungen automatisch generieren

    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.

  6. Klicken Sie auf Symbol 'Kopieren' , 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.

    ID-Token-Signierschlüssel
  7. Wählen Sie im Feld Signierschlüsselalgorithmus für ID-Token die Option HS256 als Signaturalgorithmus für diesen Schlüssel aus.

    ID-Token-Signaturalgorithmus

  8. 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.

  1. Konfigurieren Sie die Anzeige "Test" für das Aufrufen Ihrer API:
    1. 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.

    2. Um die API zu aktivieren, klicken Sie auf Zielkonfiguration.

      FindBranch API

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

      Testanzeige

    4. Klicken Sie auf Senden.

      Testaufruf

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

      Keine Antwortmeldung

      Eine neue Browserregisterkarte wird geöffnet. Wenn eine Fehlermeldung erscheint, ignorieren Sie sie.

  2. 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.
    1. 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
    2. Kopieren Sie den Berechtigungscode (der im Parameter code zurückgegeben wurde), damit Sie ihn im nächsten Schritt verwenden können.
    3. 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.
  3. 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.

    Antwort auf erfolgreichen API-Aufruf

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.