API mit OAuth sichern

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Lerninhalte

  • Beispiel-API-Proxy herunterladen und bereitstellen
  • Sie erstellen einen OAuth-geschützten API-Proxy.
  • Erstellen Sie ein Produkt, einen Entwickler und eine App.
  • Anmeldedaten für ein OAuth-Zugriffstoken austauschen.
  • API mit einem Zugriffstoken aufrufen

In dieser Anleitung erfahren Sie, wie Sie eine API mit OAuth 2.0 schützen.

OAuth ist ein Autorisierungsprotokoll, mit dem Anwendungen im Namen der Nutzer auf Informationen zugreifen können, ohne dass Nutzer ihre Nutzernamen und Passwörter ändern müssen.

Mit OAuth werden Sicherheitsanmeldedaten (z. B. Nutzername/Passwort oder Schlüssel/Secret) gegen ein Zugriffstoken ausgetauscht. Beispiel:

joe:joes_password (username:password) oder
Nf2moHOASMJeUmXVdDhlMbPaXm2U7eMc:unUOXYpPe74ZfLEb (key:secret)

könnte dann etwa so aussehen:

b0uiYwjRZLEo4lEu7ky2GGxHkanN

Das Zugriffstoken besteht aus einer zufälligen Zeichenfolge und ist temporär (es sollte nach relativ kurzer Zeit ablaufen), sodass die Weitergabe zur Authentifizierung eines Benutzers in einem App-Workflow viel sicherer ist als die Weitergabe der tatsächlichen Anmeldeinformationen.

In der OAuth 2.0-Spezifikation werden verschiedene Mechanismen für die Verteilung von Zugriffstokens für Anwendungen definiert. Die einfachste OAuth 2.0-Zustimmungsart wird als „Clientanmeldedaten“ bezeichnet. In diesem Gewährungstyp werden OAuth-Zugriffstokens im Austausch für Clientanmeldedaten generiert. Das sind Schlüssel-/Consumer-Secret-Paare, wie im obigen Beispiel.

Der Berechtigungstyp für Clientanmeldedaten in Edge wird mithilfe von Richtlinien in API-Proxys implementiert. Ein typischer OAuth-Ablauf umfasst zwei Schritte:

  • Call API Proxy proxy 1, um ein OAuth-Zugriffstoken aus Clientanmeldedaten zu generieren. Eine OAuth v2.0-Richtlinie für den API-Proxy übernimmt dies.
  • Call API proxy 2, um das OAuth-Zugriffstoken in einem API-Aufruf zu senden Der API-Proxy überprüft das Zugriffstoken mithilfe einer OAuth v2.0-Richtlinie.

Voraussetzungen

  • Ein Apigee Edge-Konto. Wenn Sie noch kein Konto haben, können Sie sich entsprechend der Anleitung unter Apigee Edge-Konto erstellen registrieren.
  • cURL, das auf Ihrem Computer installiert ist, um API-Aufrufe über die Befehlszeile auszuführen.

Tokengenerierenden API-Proxy herunterladen und bereitstellen

In diesem Schritt erstellen Sie den API-Proxy, der ein OAuth-Zugriffstoken aus einem Nutzerschlüssel und einem Consumer-Secret generiert, das in einem API-Aufruf gesendet wird. Apigee bietet einen API-Beispielproxy, der dies ausführt. Sie laden den Proxy jetzt herunter und stellen ihn bereit, um ihn später in der Anleitung zu verwenden. (Sie können diesen API-Proxy problemlos selbst erstellen. Die Schritte zum Herunterladen und Bereitstellen sind der Einfachheit halber und zeigen, wie einfach es ist, Proxys freizugeben, die bereits erstellt wurden.)

  1. Laden Sie die ZIP-Datei für den Beispiel-API-Proxy „OAuth“ herunter und speichern Sie sie in einem beliebigen Verzeichnis in Ihrem Dateisystem.
  2. Rufen Sie https://apigee.com/edge auf und melden Sie sich an.
  3. Wählen Sie in der linken Navigationsleiste Develop > API Proxies aus.
  4. Klicken Sie auf + Proxy.
    Schaltfläche "Proxy erstellen"
  5. Klicken Sie im Assistenten Proxy erstellen auf Proxy-Bundle hochladen.
  6. Wählen Sie die heruntergeladene Datei oauth.zip aus und klicken Sie auf Weiter.
  7. Klicken Sie auf Erstellen.
  8. Klicken Sie nach Abschluss des Builds auf Proxy bearbeiten, um den neuen Proxy im API-Proxy-Editor anzuzeigen.
  9. Klicken Sie auf der Übersichtsseite des API-Proxy-Editors auf das Drop-down Deployment und wählen Sie Test aus. Dies ist die Testumgebung in Ihrer Organisation.

    Klicken Sie in der Bestätigungsaufforderung auf Bereitstellen.
    Wenn Sie noch einmal auf das Drop-down-Menü „Deployment“ klicken, bedeutet ein grünes Symbol, dass der Proxy in der Testumgebung bereitgestellt wird.

Weiter so! Sie haben erfolgreich einen API-Proxy zur Generierung von Zugriffstokens heruntergeladen und in Ihrer Edge-Organisation bereitgestellt.

OAuth-Ablauf und Richtlinie ansehen

Sehen wir uns genauer an, was der API-Proxy enthält.

  1. Klicken Sie im API-Proxy-Editor auf den Tab Develop. Im linken Navigator werden zwei Richtlinien angezeigt. Außerdem werden im Abschnitt Proxy Endpoints zwei POST-Abläufe angezeigt.
  2. Klicken Sie unter Proxy Endpoints auf AccessTokenClientCredential.

    In der XML-Codeansicht sehen Sie ein Flow namens AccessTokenClientCredential:

    <Flow name="AccessTokenClientCredential">
        <Description/>
        <Request>
            <Step>
                <Name>GenerateAccessTokenClient</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/accesstoken") and (request.verb = "POST")</Condition>
    </Flow>
    

    Ein Ablauf ist ein Verarbeitungsschritt in einem API-Proxy. In diesem Fall wird der Fluss ausgelöst, wenn eine bestimmte Bedingung erfüllt ist. Dies wird als bedingter Fluss bezeichnet. Die im Element <Condition> definierte Bedingung besagt, dass, wenn der API-Proxy-Aufruf an die Ressource /accesstoken erfolgt und das Anfrageverb POST lautet, die Richtlinie GenerateAccessTokenClient ausgeführt wird, die das Zugriffstoken generiert.

  3. Betrachten wir nun die Richtlinie, die der bedingte Ablauf auslöst. Klicken Sie im Flussdiagramm auf das Richtliniensymbol GenerateAccessTokenClient.

    Die folgende XML-Konfiguration wird in die Codeansicht geladen:

    <OAuthV2 name="GenerateAccessTokenClient">
        <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
        <Operation>GenerateAccessToken</Operation>
        <!-- This is in millseconds, so expire in an hour -->
        <ExpiresIn>3600000</ExpiresIn>
        <SupportedGrantTypes>
            <!-- This part is very important: most real OAuth 2.0 apps will want to use other
             grant types. In this case it is important to NOT include the "client_credentials"
             type because it allows a client to get access to a token with no user authentication -->
            <GrantType>client_credentials</GrantType>
        </SupportedGrantTypes>
        <GrantType>request.queryparam.grant_type</GrantType>
        <GenerateResponse/>
    </OAuthV2>
    

    Die Konfiguration umfasst Folgendes:

    • Der <Operation>, der einer von mehreren vordefinierten Werten sein kann, legt die Funktionsweise der Richtlinie fest. In diesem Fall wird ein Zugriffstoken generiert.
    • Das Token läuft 1 Stunde (3.600.000 Millisekunden) nach Erstellung ab.
    • In <SupportedGrantTypes> wird erwartet, dass der verwendete OAuth <GrantType> client_credentials ist (Austausch eines Verbraucherschlüssels und -geheimnisses gegen ein OAuth-Token).
    • Das zweite <GrantType>-Element informiert die Richtlinie darüber, wo der API-Aufruf für den „type“-Parameterparameter gemäß der OAuth 2.0-Spezifikation zu suchen ist. Sie sehen dies später im API-Aufruf. Die Gewährungsart kann auch im HTTP-Header (request.header.grant_type) oder als Formularparameter (request.formparam.grant_type) gesendet werden.

Derzeit müssen Sie mit dem API-Proxy nichts weiter tun. In späteren Schritten benötigen Sie diesen API-Proxy, um ein OAuth-Zugriffstoken zu generieren. Zuerst müssen Sie jedoch noch ein paar zusätzliche Schritte ausführen:

  • Erstellen Sie den API-Proxy, der mit OAuth gesichert werden soll.
  • Erstellen Sie ein paar weitere Artefakte, die zu dem Consumer-Key und Consumer-Secret führen, das Sie gegen ein Zugriffstoken austauschen müssen.

OAuth-geschützten API-Proxy erstellen

Über das „Mocktarget“

Der simulierte Zieldienst mocktarget wird bei Apigee gehostet und gibt einfache Daten zurück. Sie können sogar über einen Webbrowser darauf zugreifen. Klicken Sie zum Testen auf folgenden Link:

http://mocktarget.apigee.net/ip

Das Ziel gibt zurück, was Sie sehen sollten, wenn Sie diesen API-Proxy aufrufen.

Sie können auch auf http://mocktarget.apigee.net/help klicken, um weitere API-Ressourcen anzuzeigen, die im Simulationsziel verfügbar sind.

Jetzt erstellen Sie den API-Proxy, der geschützt werden soll. Dies ist der API-Aufruf, der einen gewünschten Inhalt zurückgibt. In diesem Fall ruft der API-Proxy den fiktiven Zieldienst von Apigee auf, um Ihre IP-Adresse zurückzugeben. Sie sehen diese Option jedoch nur, wenn Sie mit Ihrem API-Aufruf ein gültiges OAuth-Zugriffstoken übergeben.

Der API-Proxy, den Sie hier erstellen, enthält eine Richtlinie, die in der Anfrage nach einem OAuth-Token sucht.

  1. Wählen Sie in der linken Navigationsleiste Develop > API Proxies aus.
  2. Klicken Sie auf + Proxy.
    Schaltfläche &quot;Proxy erstellen&quot;
  3. Wählen Sie im Assistenten Proxy erstellen die Option Reverse-Proxy (am häufigsten verwendet) aus und klicken Sie auf Weiter.
  4. Konfigurieren Sie den Proxy so:
    In diesem Feld tun Sie Folgendes
    Proxy-Name Eingeben: helloworld_oauth2
    Projektbasispfad

    Ändern zu: /hellooauth2

    Der Projektbasispfad ist Teil der URL, die für Anfragen an den API-Proxy verwendet wird.

    Vorhandene API

    Eingeben: https://mocktarget.apigee.net/ip

    Definiert die Ziel-URL, die Apigee Edge bei einer Anfrage an den API-Proxy aufruft.

    Beschreibung Eingeben: hello world protected by OAuth
  5. Klicken Sie auf Weiter.
  6. Auf der Seite Common policies:
    In diesem Feld tun Sie Folgendes
    Security: Authorization Wählen Sie OAuth 2.0 aus.
  7. Klicken Sie auf Weiter.
  8. Klicken Sie auf der Seite Virtuelle Hosts auf Weiter.
  9. Achten Sie darauf, dass auf der Seite Build die Testumgebung ausgewählt ist, und klicken Sie auf Erstellen und bereitstellen.
  10. Auf der Seite Zusammenfassung wird angezeigt, dass der neue API-Proxy erstellt und in Ihrer Testumgebung bereitgestellt wurde.
  11. Klicken Sie auf Proxy bearbeiten, um die Seite Übersicht für den API-Proxy aufzurufen.
    Beachten Sie, dass der API-Proxy diesmal automatisch bereitgestellt wird. Klicken Sie auf das Drop-down-Menü „Deployment“, um zu prüfen, ob sich neben der Testumgebung eine grüne Bereitstellung befindet.

Richtlinien ansehen

Sehen wir uns genauer an, was Sie erstellt haben.

  1. Klicken Sie im API-Proxy-Editor auf den Tab Develop. Sie werden sehen, dass dem Anfrageablauf des API-Proxys zwei Richtlinien hinzugefügt wurden:
    • OAuth v2.0-Zugriffstoken überprüfen: Der API-Aufruf wird überprüft, um sicherzustellen, dass ein gültiges OAuth-Token vorhanden ist.
    • Remove Header Authorization (Headerautorisierung entfernen) – EineAssignMessage-Richtlinie, die das Zugriffstoken nach der Prüfung entfernt, damit es nicht an den Zieldienst übergeben wird. Wenn der Zieldienst das OAuth-Zugriffstoken benötigt, würden Sie diese Richtlinie nicht verwenden.
  2. Klicken Sie in der Ablaufansicht auf das Symbol OAuth v2.0-Zugriffstoken überprüfen und prüfen Sie die XML darunter im Codebereich.

    <OAuthV2 async="false" continueOnError="false" enabled="true" name="verify-oauth-v2-access-token">
        <DisplayName>Verify OAuth v2.0 Access Token</DisplayName>
        <Operation>VerifyAccessToken</Operation>
    </OAuthV2>
    

    Beachten Sie, dass <Operation> VerifyAccessToken lautet. Der Vorgang definiert, was die Richtlinie tun soll. In diesem Fall prüft sie in der Anfrage nach einem gültigen OAuth-Token.

API-Produkt hinzufügen

So fügen Sie ein API-Produkt über die Apigee-Benutzeroberfläche hinzu:

  1. Wählen Sie Publish > API Products aus.
  2. Klicken Sie auf +API-Produkt.
  3. Geben Sie die Produktdetails für Ihr API-Produkt ein.
    Feld Beschreibung
    Name Interner Name des API-Produkts. Geben Sie im Namen keine Sonderzeichen an.
    Hinweis: Sobald der API-Produkt erstellt wurde, können Sie den Namen nicht mehr ändern. Zum Beispiele helloworld_oauth2-Product
    Anzeigename Anzeigename für das API-Produkt. Der Anzeigename wird in der UI verwendet und kann jederzeit bearbeitet werden. Wenn keine Angabe erfolgt, wird der Wert "Name" verwendet. Dieses Feld wird automatisch mit dem Wert „Name“ ausgefüllt. Sie können dessen Inhalt bearbeiten oder löschen. Der Anzeigename kann Sonderzeichen enthalten. Beispiel: helloworld_oauth2-Product.
    Beschreibung Beschreibung des API-Produkts.
    Umgebung Umgebungen, auf die das API-Produkt Zugriff gewährt. Wählen Sie die Umgebung aus, in der Sie den API-Proxy bereitgestellt haben. Beispiel: test.
    Zugriff Wählen Sie Public aus.
    Zugriffsanfragen automatisch genehmigen Aktivieren Sie die automatische Genehmigung von Schlüsselanfragen für dieses API-Produkt aus einer beliebigen Anwendung.
    Kontingent Für diese Anleitung ignorieren.
    Erlaubte OAuth-Bereiche Für diese Anleitung ignorieren.
  4. Wählen Sie im Feld API-Proxys den gerade erstellten API-Proxy aus.
  5. Geben Sie im Feld Pfad "/" ein. Ignorieren Sie die anderen Felder.
  6. Klicken Sie auf Speichern.

Einen Entwickler und eine App zur Organisation hinzufügen

Als Nächstes simulieren Sie den Workflow eines Entwicklers, der sich registriert, um Ihre APIs zu verwenden. Im Idealfall registrieren Entwickler sich und ihre Apps über Ihr Entwicklerportal. In diesem Schritt fügen Sie jedoch einen Entwickler und eine Anwendung als Administrator hinzu.

Entwickler haben eine oder mehrere Anwendungen, die Ihre APIs aufrufen. Jede Anwendung erhält einen eindeutigen Consumer-Key und ein Consumer-Secret. Mit diesem Schlüssel/Secret pro App erhalten Sie als API-Anbieter außerdem eine detailliertere Kontrolle über den Zugriff auf Ihre APIs und detailliertere Analyseberichte über den API-Traffic, da Edge weiß, welcher Entwickler und welche Anwendung zu welchem OAuth-Token gehört.

Entwickler erstellen

Erstellen wir nun einen Entwickler mit dem Namen Nigel Tufnel.

  1. Wählen Sie im Menü Veröffentlichen > Entwickler aus.
  2. Klicken Sie auf + Entwickler.
  3. Geben Sie im Fenster New Developer (Neuer Entwickler) Folgendes ein:
    In diesem Feld Eingeben
    Vorname Nigel
    Nachname Tufnel
    Nutzername nigel
    E-Mail nigel@example.com
  4. Klicken Sie auf Erstellen.

App registrieren

Erstellen wir nun eine App für Nigel.

  1. Wählen Sie Veröffentlichen > Apps aus.
  2. Klicken Sie auf + App.
  3. Geben Sie im Fenster New App (Neue App) Folgendes ein:
    In diesem Feld tun Sie Folgendes
    Name und Anzeigename Eingeben: nigel_app
    Entwickler Klicken Sie auf Entwickler und wählen Sie Nigel Tufnel (nigel@example.com) aus.
    Callback URL und Hinweise Leer lassen
  4. Klicken Sie unter Produkte auf Produkt hinzufügen.
  5. Wählen Sie helloworld_oauth2-Product aus.
  6. Klicken Sie auf Erstellen.

Consumer-Key und Consumer-Secret abrufen

Sie erhalten nun den Consumer-Key und das Consumer-Secret, die gegen ein OAuth-Zugriffstoken ausgetauscht werden.

  1. Achten Sie darauf, dass die Seite „nig_app“ angezeigt wird. Wenn nicht, klicken Sie auf der Seite „Apps“ (Veröffentlichen > Apps) auf nigel_app.
  2. Klicken Sie auf der Seite „nig_app“ in den Spalten Schlüssel und Secret auf Anzeigen. Beachten Sie, dass der Schlüssel/Secret dem „helloworld_oauth2-Product“ zugeordnet ist, das automatisch erstellt wurde.

  3. Kopieren und kopieren Sie den Schlüssel und das Secret. Fügen Sie sie in eine temporäre Textdatei ein. Sie benötigen sie in einem späteren Schritt, indem Sie den API-Proxy aufrufen, der diese Anmeldedaten gegen ein OAuth-Zugriffstoken austauschen.

Versuchen Sie, die API aufzurufen, um Ihre IP-Adresse abzurufen (fehlgeschlagen)

Rufen Sie den geschützten API-Proxy, der Ihre IP-Adresse zurückgeben soll, möglichst auf. Führen Sie den folgenden cURL-Befehl in einem Terminalfenster aus und ersetzen Sie dabei den Edge-Organisationsnamen. Das Wort test in der URL ist die Testumgebung Ihrer Organisation, in der Sie Ihre Proxys bereitgestellt haben. Der Proxy-Basispfad ist /hellooauth2, derselbe Basispfad, den Sie beim Erstellen des Proxys angegeben haben. Beachten Sie, dass Sie kein OAuth-Zugriffstoken an den Aufruf übergeben.

curl https://ORG_NAME-test.apigee.net/hellooauth2

Da der API-Proxy die Richtlinie OAuth v2.0 Access Token überprüfen auf ein gültiges OAuth-Token prüft, sollte der Aufruf mit der folgenden Meldung fehlschlagen:

{"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}

In diesem Fall ist ein Fehler aufgetreten. Das bedeutet, dass Ihr API-Proxy viel sicherer ist. Nur vertrauenswürdige Anwendungen mit einem gültigen OAuth-Zugriffstoken können diese API aufrufen.

Rufen Sie ein OAuth-Zugriffstoken ab.

Jetzt kommen wir zum großen Gewinn. Sie sind dabei, den kopierten Schlüssel und das Secret in einer Textdatei zu verwenden und gegen ein OAuth-Zugriffstoken auszutauschen. Jetzt starten Sie einen API-Aufruf an den importierten API-Beispielproxy oauth, mit dem ein API-Zugriffstoken generiert wird.

Führen Sie mit diesem Schlüssel und diesem Secret den folgenden cURL-Aufruf aus (beachten Sie, dass das Protokoll https ist) und ersetzen Sie den Edge-Organisationsnamen, den Schlüssel und Ihr Secret an den angegebenen Stellen:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \
"https://ORG_NAME-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials" \
-d "client_id=CLIENT_KEY&client_secret=CLIENT_SECRET"

Wenn Sie einen Client wie Postman für den Aufruf verwenden, müssen client_id und client_secret in den Text der Anfrage eingefügt werden und x-www-form-urlencoded sein.

Es sollte eine Antwort in folgender Form zurückgegeben werden:

{
  "issued_at" : "1466025769306",
  "application_name" : "716bbe61-f14a-4d85-9b56-a62ff8e0d347",
  "scope" : "",
  "status" : "approved",
  "api_product_list" : "[helloworld_oauth2-Product]",
  "expires_in" : "3599", //--in seconds
  "developer.email" : "nigel@example.com",
  "token_type" : "BearerToken",
  "client_id" : "xNnREu1DNGfiwzQZ5HUN8IAUwZSW1GZW",
  "access_token" : "GTPY9VUHCqKVMRB0cHxnmAp0RXc0",
  "organization_name" : "myOrg",
  "refresh_token_expires_in" : "0", //--in seconds
  "refresh_count" : "0"
}

Sie haben Ihr OAuth-Zugriffstoken erhalten. Kopieren Sie den Wert des Zugriffs-Tokens (ohne Anführungszeichen) und fügen Sie ihn in Ihre Textdatei ein. Sie werden ihn gleich verwenden.

Was ist gerade passiert?

Denken Sie daran, dass beim bedingten Ablauf im oauth-Proxy, der angegeben hat, dass der Ressourcen-URI /accesstoken und das Anfrageverb POST lautet, die OAuth-Richtlinie GenerateAccessTokenClient ausführen soll, die ein Zugriffstoken generiert. Ihr cURL-Befehl erfüllt diese Bedingungen, sodass die OAuth-Richtlinie ausgeführt wurde. Sie hat Ihren Consumer-Key und Ihr Consumer-Secret verifiziert und gegen ein OAuth-Token ausgetauscht, das in einer Stunde abläuft.

API mit einem Zugriffstoken aufrufen (erfolgreich)

Mit dem Zugriffstoken können Sie nun den API-Proxy aufrufen. Führen Sie den folgenden cURL-Aufruf aus: Ersetzen Sie den Edge-Organisationsnamen und das Zugriffstoken.

curl https://ORG_NAME-test.apigee.net/hellooauth2 -H "Authorization: Bearer TOKEN"

Sie sollten nun einen erfolgreichen Aufruf an den API-Proxy anfordern, der Ihre IP-Adresse zurückgibt. Beispiel:

{"ip":"::ffff:192.168.14.136"}

Sie können diesen API-Aufruf für etwa eine Stunde wiederholen, nach deren Ablauf das Zugriffstoken abläuft. Für den Aufruf nach einer Stunde müssen Sie mit den vorherigen Schritten ein neues Zugriffstoken generieren.

Glückwunsch! Sie haben einen API-Proxy erstellt und geschützt, indem ein gültiges OAuth-Zugriffstoken in den Aufruf eingefügt wurde.

Weitere Informationen