Verwenden von OAuth2 für den Zugriff auf die Edge API

Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu Apigee X.
info

Mit Apigee Edge können Sie Edge API-Aufrufe tätigen, die mit OAuth2-Tokens authentifiziert werden. Die Unterstützung für OAuth2 ist in Edge für die Cloud-Konten standardmäßig aktiviert. Wenn Sie Edge für die Private Cloud verwenden, können Sie OAuth2 erst nutzen, nachdem Sie SAML oder LDAP eingerichtet haben.

Funktionsweise von OAuth2 (mit der Apigee Edge API)

Für Aufrufe der Apigee Edge API ist eine Authentifizierung erforderlich, damit wir sicher sein können, dass Sie die Person sind, für die Sie sich ausgeben. Zur Authentifizierung muss ein OAuth2-Zugriffstoken mit Ihrer Anfrage an die API gesendet werden.

Wenn Sie beispielsweise Details zu einer Organisation in Edge abrufen möchten, senden Sie eine Anfrage an eine URL wie die folgende:

https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval

Sie können diese Anfrage jedoch nicht einfach senden, ohne uns mitzuteilen, wer Sie sind. Andernfalls könnte jeder die Details Ihrer Organisation sehen.

Hier kommt OAuth2 ins Spiel: Um Sie zu authentifizieren, müssen Sie uns in dieser Anfrage auch ein Zugriffstoken senden. Das Zugriffstoken teilt uns mit, wer Sie sind, damit wir sicher sein können, dass Sie die Details der Organisation sehen dürfen.

Glücklicherweise können Sie ein Token abrufen, indem Sie Ihre Anmeldedaten an den Edge OAuth2-Dienst senden. Der Dienst antwortet mit Zugriffs- und Aktualisierungstokens.

OAuth2-Ablauf: Die erste Anfrage

Die folgende Abbildung zeigt den OAuth2-Ablauf, wenn Sie zum ersten Mal auf die Edge API zugreifen:

OAuth-Ablauf: Erste Anfrage
Abbildung 1: OAuth-Ablauf: Erste Anfrage

Wie in Abbildung 1 dargestellt, geschieht Folgendes, wenn Sie Ihre erste Anfrage an die Edge API senden:

  1. Sie fordern ein Zugriffstoken an. Sie können dies mit der Edge API, acurl oder get_token tun. Beispiel:
    get_token
    Enter username:
    ahamilton@apigee.com
    Enter the password for user 'ahamilton@apigee.com'
    [hidden input]
    Enter the six-digit code if 'ahamilton@apigee.com' is MFA enabled or press ENTER:
    123456
  2. Der Edge OAuth2-Dienst antwortet mit einem Zugriffstoken und gibt es in stdout aus; Beispiel:
    Dy42bGciOiJSUzI1NiJ9.eyJqdGkiOiJhM2YwNjA5ZC1lZTIxLTQ1YjAtOGQyMi04MTQ0MTYxNjNhNTMiLCJz
    AJpdGUiLCJhcHByb3ZhbHMubWUiLCJvYXV0aC5hcHByb3ZhbHMiXSwiY2xpZW50X2lkIjoiZWRnZWNsaSIsIm
    NjbGkiLCJhenAiOiJlZGdlY2xpIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9pZCI6IjJkMWU3NDI
    GzQyMC1kYzgxLTQzMDQtOTM4ZS1hOGNmNmVlODZhNzkiLCJzY29wZSI6WyJzY2ltLm1lIiwib3BlbmlkIiwic
    ENC05MzhlLWE4Y2Y2ZWU4NmE3OSIsIm9yaWdpbiI6InVzZXJncmlkIiwidXNlcl9uYW1lIjoiZGFuZ2VyNDI0
    RI6ImUyNTM2NWQyIiwiaWF0IjoxNTI4OTE2NDA5LCJleHAiOjE1Mjg5MTgyMDksImlzcyI6Imh0dHBzOi8vbG
    420iLCJlbWFpbCI6ImRhbmdlcjQyNDJAeWFob28uY29tIiwiYXV0aF90aW1lIjoxNTI4OTE2NDA5LCJhbCI6M
    2lLmNvbSIsInppZCI6InVhYSIsImF1ZCI6WyJlZGdlY2xpIiwic2NpbSIsIm9wZW5pZCIsInBhc3N3b3JkIiw

    Die Dienstprogramme acurl und get_token speichern die Zugriffs- und Aktualisierungstokens im Hintergrund in ~/.sso-cli (Das Aktualisierungstoken wird nicht in stdout geschrieben.) Wenn Sie den Edge OAuth2-Dienst verwenden, um Tokens abzurufen, müssen Sie sie selbst für die spätere Verwendung speichern.

  3. Sie senden eine Anfrage mit dem Zugriffstoken an die Edge API. acurl fügt das Token automatisch an. Beispiel:
    acurl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval

    Wenn Sie einen anderen HTTP-Client verwenden, müssen Sie das Zugriffstoken hinzufügen. Beispiel:

    curl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
      -H "Authorization: Bearer ACCESS_TOKEN"
  4. Die Edge API führt Ihre Anfrage aus und gibt in der Regel eine Antwort mit Daten zurück.

OAuth2-Ablauf: Nachfolgende Anfragen

Bei nachfolgenden Anfragen müssen Sie Ihre Anmeldedaten nicht gegen ein Token austauschen. Stattdessen können Sie einfach das bereits vorhandene Zugriffstoken einfügen, solange es noch nicht abgelaufen ist:

OAuth-Ablauf: Nachfolgende Anfragen
Abbildung 2: OAuth-Ablauf: Nachfolgende Anfragen

Wie in Abbildung 2 dargestellt, geschieht Folgendes, wenn Sie bereits ein Zugriffstoken haben:

  1. Sie senden eine Anfrage mit dem Zugriffstoken an die Edge API. acurl fügt das Token automatisch an. Wenn Sie andere Tools verwenden, müssen Sie das Token manuell hinzufügen.
  2. Die Edge API führt Ihre Anfrage aus und gibt in der Regel eine Antwort mit Daten zurück.

OAuth2-Ablauf: Wenn Ihr Zugriffstoken abläuft

Wenn ein Zugriffstoken abläuft (nach 12 Stunden), können Sie mit dem Aktualisierungstoken ein neues Zugriffstoken abrufen:

OAuth-Ablauf: Zugriffstoken aktualisieren
Abbildung 3: OAuth-Ablauf: Zugriffstoken aktualisieren

Wie in Abbildung 3 dargestellt, geschieht Folgendes, wenn Ihr Zugriffstoken abgelaufen ist:

  1. Sie senden eine Anfrage an die Edge API, aber Ihr Zugriffstoken ist abgelaufen.
  2. Die Edge API lehnt Ihre Anfrage als nicht autorisiert ab.
  3. Sie senden ein Aktualisierungstoken an den Edge OAuth2-Dienst. Wenn Sie acurl verwenden, geschieht dies automatisch.
  4. Der Edge OAuth2-Dienst antwortet mit einem neuen Zugriffstoken.
  5. Sie senden eine Anfrage mit dem neuen Zugriffstoken an die Edge API.
  6. Die Edge API führt Ihre Anfrage aus und gibt in der Regel eine Antwort mit Daten zurück.

Tokens abrufen

Neben einem Dienstprogramm wie curl können Sie die folgenden Apigee-Dienstprogramme verwenden, um ein Zugriffstoken abzurufen, das Sie an die Edge API senden können:

  • Dienstprogramm get_token: Tauscht Ihre Apigee-Anmeldedaten gegen Zugriffs- und Aktualisierungstokens aus, mit denen Sie die Edge API aufrufen können.
  • Dienstprogramm acurl: Bietet einen praktischen Wrapper für einen Standard curl Befehl. Erstellt HTTP-Anfragen an die Edge API, ruft Zugriffs- und Aktualisierungstokens von get_token ab und übergibt das Zugriffstoken an die Edge API.
  • Token-Endpunkte im Edge OAuth2-Dienst: Tauschen Sie Ihre Apigee-Anmeldedaten über einen Aufruf der Edge API gegen Zugriffs- und Aktualisierungstokens aus.

Diese Dienstprogramme tauschen Ihre Apigee-Kontodaten (E-Mail-Adresse und Passwort) gegen Tokens mit den folgenden Gültigkeitsdauern aus:

  • Zugriffstokens laufen nach 12 Stunden ab.
  • Aktualisierungstokens laufen nach 30 Tagen ab.

Sobald Sie einen API-Aufruf mit acurl oder get_token, erfolgreich ausgeführt haben, können Sie das Tokenpaar 30 Tage lang verwenden. Nach Ablauf müssen Sie Ihre Anmeldedaten noch einmal eingeben und neue Tokens abrufen.

Mit OAuth2 auf die Edge API zugreifen

Um auf die Edge API zuzugreifen, senden Sie eine Anfrage an einen API-Endpunkt und fügen das Zugriffstoken ein. Sie können dies mit jedem HTTP-Client tun, einschließlich eines Befehlszeilenprogramms wie curl, einer browserbasierten Benutzeroberfläche wie Postman oder eines Apigee-Dienstprogramms wie acurl.

Der Zugriff auf die Edge API mit acurl und mit curl wird in den folgenden Abschnitten beschrieben.

acurl verwenden

Um mit acurl auf die Edge API zuzugreifen, muss Ihre erste Anfrage Ihre Anmeldedaten enthalten. Der Edge OAuth2-Dienst antwortet mit den Zugriffs- und Aktualisierungstokens. acurl speichert die Tokens lokal.

Bei nachfolgenden Anfragen verwendet acurl die gespeicherten Tokens in ~/.sso-cli, sodass Sie Ihre Anmeldedaten erst wieder eingeben müssen, wenn die Tokens abgelaufen sind.

Das folgende Beispiel zeigt eine erste acurl Anfrage, mit der Details zur „ahamilton-eval“ Organisation abgerufen werden:

acurl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
  -u ahamilton@apigee.com
Enter the password for user 'ahamilton@apigee.com'
[hidden input]
Enter the six-digit code (no spaces) if 'ahamilton@apigee.com' is MFA-enabled or press ENTER:
1a2b3c
{
  "createdAt" : 1491854501264,
  "createdBy" : "noreply_iops@apigee.com",
  "displayName" : "ahamilton",
  "environments" : [ "prod", "test" ],
  "lastModifiedAt" : 1491854501264,
  "lastModifiedBy" : "noreply_iops@apigee.com",
  "name" : "ahamilton",
  "properties" : {
    "property" : [ {
      "name" : "features.isSmbOrganization",
      "value" : "false"
    }, {
      "name" : "features.isCpsEnabled",
      "value" : "true"
    } ]
  },
  "type" : "trial"
}

acurl https://api.enterprise.apigee.com/v1/o/ahamilton-eval/apis/helloworld/revisions/1/policies

[ "SOAP-Message-Validation-1", "Spike-Arrest-1", "XML-to-JSON-1" ]

Neben den Details zur Organisation zeigt dieses Beispiel auch eine zweite Anfrage mit der eine Liste der Richtlinien im API-Proxy „helloworld“ abgerufen wird. In der zweiten Anfrage wird die Abkürzung „o“ für „organizations“ in der URL verwendet.

Beachten Sie, dass acurl das Zugriffstoken automatisch an die zweite Anfrage übergibt. Sie müssen Ihre Anmeldedaten nicht übergeben, sobald acurl die OAuth2-Tokens gespeichert hat. Für nachfolgende Aufrufe wird das Token aus ~/.sso-cli abgerufen.

Weitere Informationen finden Sie unter Mit acurl auf die Edge API zugreifen.

curl verwenden

Sie können curl verwenden, um auf die Edge API zuzugreifen. Dazu müssen Sie zuerst die Zugriffs- und Aktualisierungstokens abrufen. Sie können diese mit einem Dienstprogramm wie get_token oder dem Edge OAuth2-Dienst abrufen..

Nachdem Sie Ihr Zugriffstoken erfolgreich gespeichert haben, übergeben Sie es im Authorization Header Ihrer Aufrufe an die Edge API, wie im folgenden Beispiel gezeigt:

curl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
  -H "Authorization: Bearer ACCESS_TOKEN"

Das Zugriffstoken ist nach der Ausstellung 12 Stunden lang gültig. Nach Ablauf des Zugriffstokens kann das Aktualisierungstoken 30 Tage lang verwendet werden, um ein weiteres Zugriffstoken auszustellen, ohne dass Anmeldedaten erforderlich sind. Apigee empfiehlt, erst nach Ablauf des Aktualisierungstokens ein neues Zugriffstoken anzufordern, anstatt Anmeldedaten einzugeben und bei jedem API-Aufruf eine neue Anfrage zu senden.

Ablauf von Tokens

Sobald Ihr Zugriffstoken abgelaufen ist, können Sie mit dem Aktualisierungstoken ein neues Zugriffstoken abrufen, ohne Ihre Anmeldedaten noch einmal senden zu müssen.

Wie Sie Ihr Zugriffstoken aktualisieren, hängt vom verwendeten Tool ab:

  • acurl: Keine Aktion erforderlich. acurl aktualisiert das Zugriffstoken automatisch wenn Sie eine Anfrage senden, die ein veraltetes Token enthält.
  • get_token: Rufen Sie get_token auf, um das Zugriffstoken zu aktualisieren.
  • Edge OAuth2-Dienst: Senden Sie eine Anfrage, die Folgendes enthält:
    • Aktualisierungstoken
    • Formularparameter grant_type auf „refresh_token“ gesetzt

OAuth2 für Maschinenbenutzer

Mit den Dienstprogrammen acurl und get_token können Sie den automatisierten Zugriff auf die Edge APIs mit OAuth2-Authentifizierung für Maschinenbenutzer skripten. Das folgende Beispiel zeigt, wie Sie mit get_token ein Zugriffstoken anfordern und dann den Tokenwert zu einem curl Aufruf hinzufügen:

  USER=me@example.com
  PASS=not-that-secret
  TOKEN=$(get_token -u $USER:$PASS -m '')
  curl -H "Authorization: Bearer $TOKEN" 'https://api.enterprise.apigee.com/v1/organizations/...'

Alternativ können Sie die Tokenanfrage und den curl Aufruf mit dem acurl Dienstprogramm kombinieren. Beispiel:

  USER=me@example.com
  PASS=not-that-secret
  acurl -u $USER:$PASS -m '' 'https://api.enterprise.apigee.com/v1/organizations/...'
  

In beiden Beispielen wird durch Festlegen des Werts von -m auf einen leeren String verhindert, dass ein Maschinenbenutzer nach einem MFA-Code gefragt wird.