OAuth 2.0-Tokens abrufen

Diese Seite gilt für Apigee und Apigee Hybrid.

Apigee Edge-Dokumentation aufrufen

In diesem Dokument erfahren Sie, wie Sie OAuth 2.0-Zugriffstokens und Autorisierungscodes mit der Apigee API abrufen. Außerdem erfahren Sie, wie Sie Richtlinien für jeden OAuth 2.0-Grant-Typ erstellen und Proxy-Endpunkte für die Annahme von Clientanfragen konfigurieren.

Autorisierungscode-Grant-Typ verwenden

In diesem Abschnitt wird erläutert, wie Sie ein Zugriffstoken mithilfe des Ablaufs für den Autorisierungscode-Grant-Typ abrufen. Die Token-Anfrage für diesen Ablauf erfordert einen Autorisierungscode. Weitere Informationen finden Sie unter Autorisierungscode abrufen. Siehe auch OAuth 2.0-Grant-Typen

Beispielanfrage

curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
   -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
   -X POST 'https://apitest.acme.com/oauth/token' \
   -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com' 

Erforderliche Parameter

Standardmäßig müssen diese Parameter x-www-form-urlencoded lauten und im Anfragetext angegeben sein (wie im obigen Beispiel dargestellt). Es ist jedoch möglich, diese Standardeinstellung zu ändern. Dazu konfigurieren Sie die Elemente <GrantType>, <Code> und <RedirectUri> in der OAuthV2-Richtlinie. Siehe OAuthV2-Richtlinie.

  • grant_type – Muss auf den Wert authorization_code festgelegt sein.
  • code – Autorisierungscode. Weitere Informationen finden Sie unter Autorisierungscode anfordern.
  • redirect_uri – Dieser Parameter muss angegeben werden, falls der Parameter redirect_uri in der vorherigen Autorisierungscodeanfrage enthalten war. Wenn der Parameter redirect_uri nicht in der Autorisierungscodeanfrage enthalten war und Sie diesen Parameter nicht angeben, verwendet die Richtlinie den Wert der Callback-URL, die in der registrierten Entwickler-App bereitgestellt wird.

Optionale Parameter

  • state – Ein String, der mit der Antwort zurückgegeben wird. Wird in der Regel verwendet, um eine websiteübergreifende Anfragefälschung zu verhindern.
  • scope – Ermöglicht das Filtern der Liste der API-Produkte, mit denen das erstellte Token verwendet werden kann. Ausführliche Informationen zu Bereichen finden Sie unter Mit OAuth2-Bereichen arbeiten.

Autorisierung

Sie müssen die Client-ID und den Clientschlüssel entweder als Basis-Autorisierungsheader (Base64-codiert) oder als Formularparameter client_id und client_secret übergeben. Sie erhalten diese Werte von einer registrierten Entwickler-App. Siehe auch Basis-Authentifizierungsdaten codieren.

Beispielendpunkt

Dies ist ein Beispiel für die Endpunktkonfiguration zum Generieren eines Zugriffstoken. Es führt die Richtlinie "GenerateAccessToken" aus, die zur Unterstützung des Grant-Typs "authorization_code" konfiguriert sein muss.

...
       <Flow name="generate-access-token">
            <Description>Generate a token</Description>
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

Beispielrichtlinie

Dies ist eine grundlegende "GenerateAccessToken"-Richtlinie, die für die Annahme des Grant-Typs authorization_code konfiguriert ist. Informationen zu optionalen Konfigurationselementen, die mit dieser Richtlinie konfiguriert werden können, finden sich unter OAuthV2-Richtlinie.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn>
    <RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn>
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Rückgabe

Ist <GenerateResponse> aktiviert, so gibt die Richtlinie eine JSON-Antwort zurück, die das Zugriffstoken enthält, wie unten dargestellt. Der Grant-Typ authorization_code erstellt ein Zugriffs- und ein Aktualisierungstoken, sodass eine Antwort so aussehen kann:

{
    "issued_at": "1420262924658",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420262924658",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "fYACGW7OCPtCNDEnRSnqFlEgogboFPMm",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "2l4IQtZXbn5WBJdL6EF7uenOWRsi",
    "organization_name": "docs",
    "refresh_token_expires_in": "86399", //--in seconds
    "refresh_count": "0"
}

Ist <GenerateResponse> auf "false" gesetzt, gibt die Richtlinie keine Antwort zurück. Stattdessen wird der folgende Satz Ablaufvariablen mit Daten gefüllt, die sich auf die Zugriffstoken-Erteilung beziehen.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

Beispiel:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token
oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.GenerateAccessToken.refresh_token_status

Clientanmeldedaten-Grant-Typ verwenden

In diesem Abschnitt wird erläutert, wie Sie ein Zugriffstoken mit dem Ablauf für den Clientanmeldedaten-Grant-Typ abrufen. Siehe auch OAuth 2.0-Grant-Typen

Beispielanfrage

curl -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \
  -X POST "https://apitest.acme.com/oauth/token" \
  -d "grant_type=client_credentials"

Erforderliche Parameter

  • grant_type – Muss auf den Wert client_credentials festgelegt sein.

    Standardmäßig muss der erforderliche Parameter grant_type x-www-form-urlencoded sein und im Anfragetext angegeben sein (siehe Beispiel oben). Es ist jedoch möglich, diese Standardeinstellung zu ändern, indem das Element <GrantType> in der OAuthV2-Richtlinie konfiguriert wird. Sie können beispielsweise den Parameter in einem Abfrageparameter übergeben. Weitere Informationen finden sich unter OAuthV2-Richtlinie.

Optionale Parameter

  • state – Ein String, der mit der Antwort zurückgegeben wird. Wird in der Regel verwendet, um eine websiteübergreifende Anfragefälschung zu verhindern.
  • scope – Ermöglicht das Filtern der Liste der API-Produkte, mit denen das erstellte Token verwendet werden kann. Ausführliche Informationen zu Bereichen finden Sie unter Mit OAuth2-Bereichen arbeiten.

Autorisierung

Sie müssen die Client-ID und den Clientschlüssel entweder als Basis-Autorisierungsheader (Base64-codiert) oder als Formularparameter client_id und client_secret übergeben. Sie erhalten diese Werte von der mit der Anfrage verknüpften registrierten Entwickler-App. Weitere Informationen finden Sie unter Anmeldedaten für die Basisauthentifizierung codieren.

Beispielendpunkt

Dies ist ein Beispiel für die Endpunktkonfiguration zum Generieren eines Zugriffstoken. Es führt die Richtlinie "GenerateAccessToken" aus, die für die Unterstützung des Grant-Typs "client_credentials" konfiguriert sein muss.

...
       <Flow name="generate-access-token">
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

Beispielrichtlinie

Dies ist eine grundlegende "GenerateAccessToken"-Richtlinie, die für die Annahme des Grant-Typs client_credentials konfiguriert ist. Informationen zu optionalen Konfigurationselementen, die mit dieser Richtlinie konfiguriert werden können, finden sich unter OAuthV2-Richtlinie.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <SupportedGrantTypes>
      <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Rückgabe

Ist <GenerateResponse> aktiviert, so gibt die Richtlinie eine JSON-Antwort zurück. Beachten Sie, dass Aktualisierungstokens mit dem Grant-Typ client_credentials nicht unterstützt werden. Es wird nur ein Zugriffstoken erstellt. Beispiel:

{
    "issued_at": "1420260525643",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "scope": "READ",
    "status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "XkhU2DFnMGIVL2hvsRHLM00hRWav",
    "organization_name": "docs"
}

Ist <GenerateResponse> auf "false" gesetzt, gibt die Richtlinie keine Antwort zurück. Stattdessen wird der folgende Satz Ablaufvariablen mit Daten gefüllt, die sich auf die Zugriffstoken-Erteilung beziehen.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds

Beispiel:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in     //--in seconds

Passwort-Grant-Typ verwenden

In diesem Abschnitt wird erläutert, wie Sie ein Zugriffstoken mit dem Ablauf für den Grant-Typ für die Passwort-Anmeldedaten des Ressourceninhabers (Passwort) abrufen. Siehe Grant-Typ "Passwort" implementieren. Siehe auch OAuth 2.0-Grant-Typen

Beispielanfrage

curl -v -k -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \
  -X POST "https://apitest.acme.com/oauth/token" \
  -d "grant_type=password&username=a_username&password=a_password"

Erforderliche Parameter

Standardmäßig müssen diese Parameter x-www-form-urlencoded lauten und im Anfragetext angegeben sein (wie im obigen Beispiel dargestellt). Es ist jedoch möglich, diese Standardeinstellung zu ändern. Dazu konfigurieren Sie die Elemente <GrantType>, <Username> und <Password> in der OAuthV2-Richtlinie. Siehe OAuthV2-Richtlinie.

Nutzeranmeldedaten werden in der Regel auf Basis einer LDAP- oder JavaScript-Richtlinie unter Verwendung eines Anmeldedatenspeichers validiert.

  • grant_type – Muss auf den Wert password festgelegt sein.
  • username - Der Nutzername des Ressourceninhabers.
  • password – Das Passwort des Ressourceninhabers.

Optionale Parameter

  • state – Ein String, der mit der Antwort zurückgegeben wird. Wird in der Regel verwendet, um eine websiteübergreifende Anfragefälschung zu verhindern.
  • scope – Ermöglicht das Filtern der Liste der API-Produkte, mit denen das erstellte Token verwendet werden kann. Ausführliche Informationen zu Bereichen finden Sie unter Mit OAuth2-Bereichen arbeiten.

Autorisierung

Sie müssen die Client-ID und den Clientschlüssel entweder als Basis-Autorisierungsheader (Base64-codiert) oder als Formularparameter client_id und client_secret übergeben. Sie erhalten diese Werte von der mit der Anfrage verknüpften registrierten Entwickler-App. Weitere Informationen finden Sie unter Anmeldedaten für die Basisauthentifizierung codieren.

Beispielendpunkt

Dies ist ein Beispiel für die Endpunktkonfiguration zum Generieren eines Zugriffstoken. Damit wird die Richtlinie "GenerateAccessToken" ausgeführt, die zur Unterstützung des Grant-Typs "Passwort" konfiguriert werden muss.

...
       <Flow name="generate-access-token">
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

Beispielrichtlinie

Dies ist eine grundlegende "GenerateAccessToken"-Richtlinie, die für die Annahme des Grant-Typs "Passwort" konfiguriert ist. Informationen zu optionalen Konfigurationselementen, die mit dieser Richtlinie konfiguriert werden können, finden sich unter OAuthV2-Richtlinie.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Rückgabe

Ist <GenerateResponse> aktiviert, so gibt die Richtlinie eine JSON-Antwort zurück. Beachten Sie, dass beim Grant-Typ "Passwort" sowohl ein Zugriffs- als auch ein Aktualisierungstoken erstellt wird. Beispiel:

{
    "issued_at": "1420258685042",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420258685042",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6",
    "organization_name": "docs",
    "refresh_token_expires_in": "28799", //--in seconds
    "refresh_count": "0"
}

Ist <GenerateResponse> auf "false" gesetzt, gibt die Richtlinie keine Antwort zurück. Stattdessen wird der folgende Satz Ablaufvariablen mit Daten gefüllt, die sich auf die Zugriffstoken-Erteilung beziehen.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in   //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in  //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

Beispiel:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token
oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.GenerateAccessToken.refresh_token_status

Impliziten Grant-Typ verwenden

In diesem Abschnitt wird erläutert, wie Sie ein Zugriffstoken mit dem Grant-Typ "Implizit" abrufen. Siehe auch OAuth 2.0-Grant-Typen

Beispielanfrage

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'https://apitest.acme.com/oauth/implicit?response_type=token&client_id=c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ&redirect_uri=http://callback-example.com'

Erforderliche Parameter

Standardmäßig müssen diese Parameter Abfrageparameter sein (siehe Beispiel oben). Sie können diese Standardeinstellung jedoch ändern, indem Sie die Elemente <ResponseType>, <ClientId> und <RedirectUri> in der OAuthV2-Richtlinie konfigurieren, die mit diesem /token-Endpunkt verknüpft ist. Weitere Informationen finden sich unter OAuthV2-Richtlinie.

Nutzeranmeldedaten werden in der Regel auf Basis einer LDAP-Dienst- oder JavaScript-Richtlinie unter Verwendung eines Anmeldedatenspeichers validiert.

  • response_type – Muss auf den Wert token festgelegt sein.
  • client_id – Die Client-ID einer registrierten Entwickler-App.
  • redirect_uri – Dieser Parameter ist obligatorisch, wenn bei der Registrierung der Client-Entwickler-App kein Callback-URI angegeben wurde. Wenn bei der Client-Registrierung eine Callback-URL angegeben wurde, wird sie mit diesem Wert verglichen und muss exakt mit diesem übereinstimmen.

Optionale Parameter

  • state – Ein String, der mit der Antwort zurückgegeben wird. Wird in der Regel verwendet, um eine websiteübergreifende Anfragefälschung zu verhindern.
  • scope – Ermöglicht das Filtern der Liste der API-Produkte, mit denen das erstellte Token verwendet werden kann. Ausführliche Informationen zu Bereichen finden Sie unter Mit OAuth2-Bereichen arbeiten.

Autorisierung

Erfordert keinen Autorisierungsheader; Sie müssen jedoch eine Client-ID als Anfrageparameter übergeben.

Beispielendpunkt

Dies ist ein Beispiel für die Endpunktkonfiguration zum Generieren eines Zugriffstoken. Dabei wird die Richtlinie "GenerateAccessTokenImplicitGrees" ausgeführt.

...
       <Flow name="generate-access-token-implicit">
            <Request>
                <Step>
                    <Name>GenerateAccessTokenImplicitGrant</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/implicit") and (request.verb = "POST")</Condition>
        </Flow>
...

Beispielrichtlinie

Dies ist eine grundlegende GenerateAccessTokenImplicitGrant-Richtlinie, die Tokenanfragen für den impliziten Gewährungsvorgang verarbeitet. Informationen zu optionalen Konfigurationselementen, die mit dieser Richtlinie konfiguriert werden können, finden sich unter OAuthV2-Richtlinie.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="GenerateAccessTokenImplicit">
    <DisplayName>GenerateAccessTokenImplicit</DisplayName>
    <Operation>GenerateAccessTokenImplicitGrant</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Rückgabe

Ist <GenerateResponse> aktiviert, so gibt die Richtlinie eine 302-Standortweiterleitung im Antwortheader zurück. Die Weiterleitung verweist auf die im Parameter redirect_uri angegebene URL und wird mit dem Zugriffstoken und der Ablaufzeit des Token angehängt. Der Grant-Typ "Implizit" unterstützt Aktualisierungstokens nicht. Beispiel:

https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5

Ist <GenerateResponse> auf "false" gesetzt, gibt die Richtlinie keine Antwort zurück. Stattdessen wird der folgende Satz Ablaufvariablen mit Daten gefüllt, die sich auf die Zugriffstoken-Erteilung beziehen.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in  //--in seconds

Beispiel:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in   //--in seconds

Autorisierungscode abrufen

Beim Grant-Typ "Autorisierungscode" ist ein Autorisierungscode erforderlich, um ein Zugriffstoken zu erhalten. Weitere Informationen finden sich unter Autorisierungscode-Grant-Typ verwenden. Siehe auch OAuth 2.0-Grant-Typen

Beispielanfrage

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \
  "https://apitest.acme.com/oauth/authorize?response_type=code&client_id=c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ&redirect_uri=http://my-callback.com"

Erforderliche Parameter

Standardmäßig müssen diese Parameter Abfrageparameter sein (siehe Beispiel oben). Sie können diese Standardeinstellung jedoch ändern, indem Sie die Elemente <ResponseType>, <ClientId> und <RedirectUri> in der OAuthV2-Richtlinie konfigurieren. Weitere Informationen finden sich unter OAuthV2-Richtlinie.

  • redirect_uri – Wenn ein vollständiger Callback-URI in der registrierten Client-App angegeben wird, ist dieser Parameter optional. Andernfalls ist er erforderlich. Der Rückruf ist die URL, über die Apigee den neu erstellten Authentifizierungscode sendet. Siehe Anwendungen registrieren und API-Schlüssel verwalten.
  • response_type – Muss auf den Wert code festgelegt sein.
  • client_id – Die Client-ID einer registrierten Entwickler-App.

Optionale Parameter

  • redirect_uri – Wenn ein vollständiger Callback-URI in der registrierten Client-App angegeben wird, ist dieser Parameter optional. Andernfalls ist er erforderlich. Der Rückruf ist die URL, über die Apigee den neu erstellten Authentifizierungscode sendet. Siehe Anwendungen registrieren und API-Schlüssel verwalten.
  • state – Ein String, der mit der Antwort zurückgegeben wird. Wird in der Regel verwendet, um eine websiteübergreifende Anfragefälschung zu verhindern.
  • scope – Ermöglicht das Filtern der Liste der API-Produkte, mit denen das erstellte Token verwendet werden kann. Ausführliche Informationen zu Bereichen finden Sie unter Mit OAuth2-Bereichen arbeiten.

Autorisierung

Erfordert keinen Autorisierungsheader, aber die Client-ID der registrierten Client-App muss in der Anfrage angegeben werden.

Beispielrichtlinie

Dies ist eine grundlegende GenerateAuthorizationCode-Richtlinie. Weitere Konfigurationsoptionen finden Sie unter OAuthV2-Richtlinie:

<OAuthV2 name="GenerateAuthorizationCode">
    <Operation>GenerateAuthorizationCode</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Rückgabe

Ist <GenerateResponse> aktiviert, so gibt die Richtlinie den Abfrageparameter ?code an den Speicherort redirect_uri (Callback-URI) mit angehängtem Autorisierungscode zurück. Dies erfolgt über eine 302-Browser-Weiterleitung mit der URL im Standort-Header der Antwort. Beispiel: ?code=123456.

Ist <GenerateResponse> auf false gesetzt, so gibt die Richtlinie keine Antwort zurück. Stattdessen wird das folgende Set an Ablaufvariablen mit Daten zum Autorisierungscode gefüllt.

oauthv2authcode.{policy-name}.code
oauthv2authcode.{policy-name}.scope
oauthv2authcode.{policy-name}.redirect_uri
oauthv2authcode.{policy-name}.client_id

Beispiel:

oauthv2authcode.GenerateAuthorizationCode.code
oauthv2authcode.GenerateAuthorizationCode.scope
oauthv2authcode.GenerateAuthorizationCode.redirect_uri
oauthv2authcode.GenerateAuthorizationCode.client_id

Zugriffstokens aktualisieren

Aktualisierungstokens sind Anmeldedaten, mit denen Sie ein Zugriffstoken abrufen. Das ist in der Regel der Fall, wenn das Zugriffstoken abgelaufen ist oder ungültig wird. In der Antwort wird ein Aktualisierungstoken zurückgegeben, wenn Sie ein Zugriffstoken erhalten.

Beispielanfrage

Informationen zum Codieren des Basisauthentifizierungs-Headers im folgenden Aufruf finden Sie unter Basis-Authentifizierungsdaten codieren.

$ curl -X POST \
  -H "Content-type: application/x-www-form-urlencoded" \
  -H "Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ" \
  https://apitest.acme.com/oauth/refresh \
  -d "grant_type=refresh_token&refresh_token=yVSL38WpuN3Kzn1UTMoE6AQ4ANZM"

Erforderliche Parameter

Standardmäßig sucht die Richtlinie nach diesen Elementen unter den im Anfragetext angegebenen x-www-form-urlencoded-Parametern, wie im obigen Beispiel gezeigt. Mit den Elementen <GrantType> und <RefreshToken> der OAuthV2-Richtlinie können Sie einen alternativen Speicherort für diese Eingaben konfigurieren. Weitere Informationen finden sich unter OAuthV2-Richtlinie.

  • grant_type – Muss auf den Wert refresh_token festgelegt sein.
  • refresh_token – Das Aktualisierungstoken, das dem zu verlängernden Zugriffstoken zugeordnet ist.

Optionale Parameter

  • state – Ein String, der mit der Antwort zurückgegeben wird. Wird in der Regel verwendet, um eine websiteübergreifende Anfragefälschung zu verhindern.
  • scope – Ermöglicht das Filtern der Liste der API-Produkte, mit denen das erstellte Token verwendet werden kann. Ausführliche Informationen zu Bereichen finden Sie unter Mit OAuth2-Bereichen arbeiten.

Autorisierung

Erfordert keinen Autorisierungsheader, aber die Client-ID der registrierten Client-App muss in der Anfrage angegeben werden.

Beim Aktualisieren eines Zugriffstokens werden Nutzer nicht neu authentifiziert.

Im Folgenden finden Sie eine Beispiel-Endpunktkonfiguration zum Generieren eines Zugriffstokens mit einem Aktualisierungstoken. Dabei wird die Richtlinie "RefreshAccessToken" ausgeführt.

 ...
       <Flow name="generate-refresh-token">
            <Request>
                <Step>
                    <Name>RefreshAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition>
       </Flow>
...

Beispielrichtlinie

Dies ist eine grundlegende RefreshAccessToken-Richtlinie, die für die Annahme des Grant-Typs refresh_token konfiguriert ist. Informationen zu optionalen Konfigurationselementen, die mit dieser Richtlinie konfiguriert werden können, finden sich unter OAuthV2-Richtlinie.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="RefreshAccessToken">
    <Operation>RefreshAccessToken</Operation>
    <GenerateResponse enabled="true"/>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
</OAuthV2>

Rückgabe

Wenn <GenerateResponse> aktiviert ist, gibt die Richtlinie eine JSON-Antwort mit dem neuen Zugriffstoken zurück. Der Grant-Typ refresh_token unterstützt sowohl die Zugriffs- als auch die neuen Aktualisierungstokens. Beispiel:

{
    "issued_at": "1420301470489",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "scope": "READ",
    "refresh_token_issued_at": "1420301470489",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "token_type": "BearerToken",
    "refresh_token": "8fKDHLryAD9KFBsrpixlq3qPJnG2fdZ5",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "jmZ2Hqv3iNsABUtAAsfWR3QGNctw",
    "organization_name": "docs",
    "refresh_token_expires_in": "28799", //--in seconds
    "refresh_count": "2"
}

Beachten Sie: Sobald ein neues Aktualisierungstoken erstellt wurde, ist das Original ungültig.

Wenn Sie für <GenerateResponse> den Wert "true" festlegen, erhalten Sie die obige Antwort. Ist <GenerateResponse> auf "false" gesetzt, gibt die Richtlinie keine Antwort zurück. Stattdessen wird der folgende Satz Ablaufvariablen mit Daten gefüllt, die sich auf die Zugriffstoken-Erteilung beziehen.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in   //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in  //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

Beispiel:

oauthv2accesstoken.RefreshAccessToken.access_token
oauthv2accesstoken.RefreshAccessToken.expires_in
oauthv2accesstoken.RefreshAccessToken.refresh_token
oauthv2accesstoken.RefreshAccessToken.refresh_token_expires_in
oauthv2accesstoken.RefreshAccessToken.refresh_token_issued_at
oauthv2accesstoken.RefreshAccessToken.refresh_token_status

Basis-Authentifizierungsdaten codieren

Wenn Sie einen API-Aufruf ausführen, um ein Token oder einen Authentifizierungscode anzufordern, sollten Sie davon ausgehen, dass die OAuth 2.0-Spezifikation die Werte "client_id" und "client_secret" als HTTP-Basic-Autorisierungsheader übergibt, wie in IETF RFC 2617 beschrieben. Dazu müssen Sie die beiden Werte mit einem Doppelpunkt trennen und das Ergebnis Base64-codieren.

In Pseudocode:

result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))

Dabei ist ns4fQc14Zg4hKFCNaSzArVuwszX95X die Client-ID und ZIjFyTsNgQNyxI der Clientschlüssel.

Beispiele

Der folgende Beispielbefehl funktioniert unter Linux und MacOS:

export CREDENTIALS=$(echo -n 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' | base64)

Anschließend können Sie die Tokenanfrage so stellen:

$ curl -i -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Authorization: Basic $CREDENTIALS" \
  -X POST "https://apitest.acme.com/oauth/token" \
  -d "grant_type=client_credentials"

Hash-Tokens in der Datenbank

Apigee hasht alle OAuth-Zugriffstokens und -Aktualisierungstokens, um sie im Falle einer Datenbanksicherheitsverletzung zu schützen. Die ent-hashten Tokens werden in API-Aufrufen verwendet. Apigee validiert sie entsprechend der Hash-Versionen in der Datenbank.

Weitere Informationen