Richiedere token di accesso e codici di autorizzazione

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

In questo argomento viene spiegato come richiedere i token di accesso e i codici di autorizzazione, configurare Endpoint OAuth 2.0 e configura i criteri per ogni concessione supportata del testo.

Codice di esempio

Per praticità, i criteri e gli endpoint discussi in questo argomento sono disponibili su GitHub nel progetto oauth-doc-examples nel repository api-platform-samples di Apigee. Puoi eseguire il deployment del codice campione e provare le richieste di esempio mostrate in questo argomento. Per maggiori dettagli, consulta il file README del progetto.

Richiesta di un token di accesso: tipo di concessione codice di autorizzazione

Questa sezione spiega come richiedere un token di accesso utilizzando il tipo di concessione del codice di autorizzazione flusso di lavoro. Per un'introduzione ai tipi di autorizzazione per OAuth 2.0, consulta Introduzione a OAuth 2.0.

Esempio richiesta

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
   -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
   -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
   -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'

Obbligatorie parametri

Per impostazione predefinita, questi parametri devono essere x-www-form-urlencoded e specificati nel corpo della richiesta (come mostrato nell'esempio sopra riportato); ma è possibile modificare il valore predefinito configurando <GrantType>, <Code> e Elementi <RedirectUri> nel criterio OAuthV2 collegato a questo Endpoint /accesstoken. Per maggiori dettagli, vedi Criterio OAuthV2.

  • grant_type: deve essere impostato sul valore authorization_code.
  • codice - Il codice di autorizzazione ricevuto dal /authorize endpoint (o con il nome che preferisci). Per richiedere un token di accesso nell'autorizzazione di autorizzazione del codice, devi prima ottenere un codice di autorizzazione. Consulta la sezione Richiedere codici di autorizzazione di seguito. Consulta anche la sezione Implementazione il tipo di concessione del codice di autorizzazione.
  • redirect_uri - Devi fornire questo parametro se Il parametro redirect_uri è stato incluso nella precedente richiesta del codice di autorizzazione. Se il parametro redirect_uri non è stato incluso nella richiesta del codice di autorizzazione e Se non fornisci questo parametro, questo criterio utilizza il valore dell'URL di callback che è stato fornito al momento della registrazione dell'app sviluppatore.

Facoltativo parametri

  • state - Una stringa che verrà inviata insieme alla risposta. Normalmente usata per evitare attacchi di falsificazione delle richieste tra siti.
  • scope - Consente di filtrare l'elenco dei prodotti API con cui è possibile usare un token. Per informazioni dettagliate sull'ambito, vedi Utilizzo degli ambiti OAuth2.

Autenticazione

Devi passare l'ID client e il client secret come intestazione per autenticazione di base (con codifica Base64) o come parametri di forma client_id e client_secret. Tu ottenere questi valori da un'app sviluppatore registrata. Consulta anche "Codifica di base credenziali di autenticazione".

Endpoint di esempio

Ecco una configurazione di endpoint di esempio per la generazione di un token di accesso. Eseguirà Criteri generazioniAccessToken, che deve essere configurato per supportare la concessione di permission_code di testo.

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

Criterio di esempio

Questo è un criterio di base GeneraAccessToken configurato per accettare il authorization_code tipo di autorizzazione. Per informazioni sugli elementi di configurazione facoltativi che puoi configurare con questo criterio, consulta Criterio OAuthV2.

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

Restituisce

Se <GenerateResponse> è attivato, il criterio restituisce una risposta JSON che include il token di accesso, come mostrato di seguito. Il tipo di concessione authorization_code crea un token di accesso e un token di aggiornamento, quindi la risposta potrebbe avere il seguente aspetto:

{
    "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"
}

Se <GenerateResponse> viene impostato su false, il criterio non restituisce un risposta. Compila invece il seguente insieme di variabili di flusso con i dati relativi al la concessione del token di accesso.

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

Ad esempio:

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

Richiesta di un token di accesso: client tipo di concessione delle credenziali

Questa sezione spiega come richiedere un token di accesso utilizzando il tipo di concessione delle credenziali client. flusso di lavoro. Per un'introduzione ai tipi di autorizzazione per OAuth 2.0, consulta Introduzione a OAuth 2.0.

Esempio richiesta

Per informazioni sulla codifica dell'intestazione dell'autenticazione di base nella chiamata seguente, vedi "Codifica delle credenziali di autenticazione di base".

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHoAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

Obbligatorie parametri

Per impostazione predefinita, il parametro Grants_type richiesto deve essere x-www-form-urlencoded e specificato nel corpo della richiesta (come mostrato nell'esempio sopra riportato); tuttavia, è possibile modificare per impostazione predefinita configurando l'elemento <GrantType> nel criterio OAuthV2 che è collegato a questo endpoint /accesstoken. Ad esempio, puoi scegliere di trasmettere in un parametro di query. Per maggiori dettagli, vedi Criterio OAuthV2.

  • grant_type: deve essere impostato sul valore client_credentials.

Facoltativo parametri

  • state - Una stringa che verrà inviata insieme alla risposta. Normalmente usata per evitare attacchi di falsificazione delle richieste tra siti.
  • scope - Consente di filtrare l'elenco dei prodotti API con cui è possibile usare un token. Per informazioni dettagliate sull'ambito, vedi Utilizzo degli ambiti OAuth2.

Autenticazione

Devi passare l'ID client e il client secret come intestazione per autenticazione di base (con codifica Base64) o come parametri di forma client_id e client_secret. Puoi ottenere questi valori dall'app sviluppatore registrata associati alla richiesta. Vedi anche "Codifica dell'autenticazione di base" credenziali".

Endpoint di esempio

Ecco una configurazione di endpoint di esempio per la generazione di un token di accesso. Eseguirà Criterio GeneraAccessToken, che deve essere configurato per supportare la concessione client_credentials di testo.

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

Criterio di esempio

Questo è un criterio di base GeneraAccessToken configurato per accettare il client_credentials tipo di autorizzazione. Per informazioni sugli elementi di configurazione facoltativi che puoi configurare con questo criterio, consulta Criterio OAuthV2.

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

Restituisce

Se <GenerateResponse> è attivato, il criterio restituisce una risposta JSON. Nota che con il tipo di autorizzazione client_credentials i token di aggiornamento non sono supportati. Solo viene generato un token di accesso. Ad esempio:

{
    "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"
}

Se <GenerateResponse> viene impostato su false, il criterio non restituisce un risposta. Compila invece il seguente insieme di variabili di flusso con i dati relativi al la concessione del token di accesso.

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

Ad esempio:

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

Richiesta di un token di accesso: tipo di concessione della password

Questa sezione spiega come richiedere un token di accesso utilizzando la password del proprietario della risorsa flusso del tipo di autorizzazione delle credenziali (password). Per un'introduzione ai tipi di autorizzazione OAuth 2.0, consulta Introduzione a OAuth 2.0.

per ulteriori dettagli sul tipo di concessione della password, incluso un video di 4 minuti che mostra come implementarla, consulta la sezione Implementazione della password tipo di autorizzazione.

Esempio richiesta

Per informazioni sulla codifica dell'intestazione dell'autenticazione di base nella chiamata seguente, vedi "Codifica delle credenziali di autenticazione di base".

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -X POST https://docs-test.apigee.net/oauth/token \
  -d 'grant_type=password&username=the-user-name&password=the-users-password'

Obbligatorie parametri

Per impostazione predefinita, questi parametri devono essere x-www-form-urlencoded e specificati nel corpo della richiesta (come mostrato nell'esempio sopra riportato); ma è possibile modificare il valore predefinito configurando <GrantType>, <Username> e Elementi <Password> nel criterio OAuthV2 collegato a questo Endpoint /token. Per maggiori dettagli, vedi Criterio OAuthV2.

Le credenziali utente vengono generalmente convalidate a fronte di un archivio credenziali utilizzando un protocollo LDAP criterio JavaScript.

  • grant_type - Deve essere impostato sul valore password.
  • nomeutente - Il nome utente del proprietario della risorsa.
  • password - La password del proprietario della risorsa.

Facoltativo parametri

  • state - Una stringa che verrà inviata insieme alla risposta. Normalmente usata per evitare attacchi di falsificazione delle richieste tra siti.
  • scope - Consente di filtrare l'elenco dei prodotti API con cui è possibile usare un token. Per informazioni dettagliate sull'ambito, vedi Utilizzo degli ambiti OAuth2.

Autenticazione

Devi passare l'ID client e il client secret come intestazione per autenticazione di base (con codifica Base64) o come parametri di forma client_id e client_secret. Puoi ottenere questi valori dall'app sviluppatore registrata associati alla richiesta. Vedi anche "Codifica dell'autenticazione di base" credenziali".

Endpoint di esempio

Ecco una configurazione di endpoint di esempio per la generazione di un token di accesso. Eseguirà Criterio GeneraAccessToken, che deve essere configurato per supportare il tipo di concessione della password.

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

Criterio di esempio

Questo è un criterio di base GeneraAccessToken configurato per accettare la concessione della password di testo. Per informazioni sugli elementi di configurazione facoltativi che puoi configurare con questo criterio, consulta il criterio OAuthV2.

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

Restituisce

Se <GenerateResponse> è attivato, il criterio restituisce una risposta JSON. Nota che, con il tipo di concessione della password, vengono generati sia un token di accesso sia un token di aggiornamento. Per esempio:

{
    "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"
}

Se <GenerateResponse> viene impostato su false, il criterio non restituisce un risposta. Compila invece il seguente insieme di variabili di flusso con i dati relativi al la concessione del token di accesso.

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

Ad esempio:

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

Richiesta di un token di accesso: concessione implicita tipo

Questa sezione spiega come richiedere un token di accesso utilizzando il flusso del tipo di concessione implicita. Per Per un'introduzione ai tipi di autorizzazione OAuth 2.0, consulta Introduzione a OAuth 2.0.

Esempio richiesta

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

Obbligatorie parametri

Per impostazione predefinita, questi devono essere parametri di query (come mostrato nell'esempio sopra riportato). ma puoi modificare questa impostazione predefinita configurando <ResponseType>, Elementi <ClientId> e <RedirectUri> in OAuthV2 criterio collegato a questo endpoint /token. Per maggiori dettagli, vedi Criterio OAuthV2.

Le credenziali utente vengono generalmente convalidate a fronte di un archivio credenziali utilizzando un servizio LDAP sui callout o sulle norme JavaScript.

  • response_type - Deve essere impostato sul valore token.
  • client_id: l'ID client di un'app sviluppatore registrata.
  • redirect_uri: questo parametro è obbligatorio se l'URI di callback non è stato fornito al momento della registrazione dell'app sviluppatore client. Se al client è stato fornito un URL di callback registrazione, verrà confrontato con questo valore e deve corrispondere esattamente.

Facoltativo parametri

  • state - Una stringa che verrà inviata insieme alla risposta. Normalmente usata per evitare attacchi di falsificazione delle richieste tra siti.
  • scope - Consente di filtrare l'elenco dei prodotti API con cui è possibile usare un token. Per informazioni dettagliate sull'ambito, vedi Utilizzo degli ambiti OAuth2.

Autenticazione

La concessione implicita non richiede l'autenticazione di base. Devi passare un ID cliente come come spiegato qui.

Endpoint di esempio

Ecco una configurazione di endpoint di esempio per la generazione di un token di accesso. Eseguirà criterio GeneraAccessTokenImplicitGrant.

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

Criterio di esempio

Si tratta di un criterio di base GeneraAccessTokenImplicitGrant che elabora le richieste di token per il flusso del tipo di autorizzazione implicita. Per informazioni sugli elementi di configurazione facoltativi che puoi configura con questo criterio, vedi Criterio OAuthV2.

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

Restituisce

Se il criterio <GenerateResponse> è attivato, il criterio restituisce un reindirizzamento della posizione 302 nell'intestazione della risposta. Il reindirizzamento rimanda all'URL specificato nel campo redirect_uri. e viene aggiunto con il token di accesso e la data di scadenza del token. Tieni presente che l'espressione implicita il tipo di autorizzazione non supporta i token di aggiornamento. Ad esempio:

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

Se <GenerateResponse> viene impostato su false, il criterio non restituisce un risposta. Compila invece il seguente insieme di variabili di flusso con i dati relativi al la concessione del token di accesso.

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

Ad esempio:

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

Richiedere un codice di autorizzazione

Se utilizzi il flusso del tipo di concessione del codice di autorizzazione, devi ottenere un'autorizzazione prima di poter richiedere un token di accesso.

Richiesta di esempio

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code'

dove è collegato un criterio OAuthV2GenerateAuthorizationCode alla Endpoint proxy /oauth/authorize (vedi l'endpoint di esempio di seguito).

Obbligatorie parametri

Per impostazione predefinita, questi devono essere parametri di query (come mostrato nell'esempio sopra riportato). ma puoi modificare questa impostazione predefinita configurando <ResponseType>, Elementi <ClientId> e <RedirectUri> in OAuthV2 criterio collegato a questo endpoint /authorize. Per maggiori dettagli, vedi Criterio OAuthV2.

  • response_type - Deve essere impostato sul valore code.
  • client_id: l'ID client di un'app sviluppatore registrata.

Facoltativo parametri

  • redirect_uri: se è specificato un URI di callback completo (non parziale) in l'app client registrata, questo parametro è facoltativo; altrimenti è obbligatorio. Il callback è l'URL a cui Edge invia il codice di autorizzazione appena creato. Vedi anche Registrare app e gestire l'API chiave.
  • state - Una stringa che verrà inviata insieme alla risposta. Normalmente usata per evitare attacchi di falsificazione delle richieste tra siti.
  • scope - Consente di filtrare l'elenco dei prodotti API con cui è possibile usare un token. Per informazioni dettagliate sull'ambito, vedi Utilizzo degli ambiti OAuth2.

Autenticazione

Non richiede l'autenticazione di base, ma l'ID client dell'app client registrata deve da fornire nella richiesta.

Endpoint di esempio

Ecco una configurazione di endpoint di esempio per la generazione di un codice di autorizzazione:


<OAuthV2 name="GenerateAuthorizationCode">
  <Operation>GenerateAuthorizationCode</Operation>
    <!--
    ExpiresIn, in milliseconds. The ref is optional. The explicitly specified
    value is the default, when the variable reference cannot be resolved.
        60000 = 1 minute
       120000 = 2 minutes
    -->
  <ExpiresIn>60000</ExpiresIn>
  <GenerateResponse enabled="true"/>
</OAuthV2>

Criterio di esempio

Questo è un criterio di baseGenerateAuthorizationCode. Per informazioni sulla configurazione facoltativa che puoi configurare con questo criterio, consulta Criterio OAuthV2.

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

Restituisce

Se il criterio <GenerateResponse> viene attivato, il criterio restituisce ?code parametro di query nella posizione redirect_uri (URI del callback) con l'autorizzazione codice allegato. Viene inviato tramite un reindirizzamento del browser 302 con l'URL nell'intestazione Location del risposta. Ad esempio: ?code=123456.

Se il criterio <GenerateResponse> viene impostato su false, il criterio non restituiscono una risposta. Compila invece il seguente insieme di variabili di flusso con i dati relativi al codice di autorizzazione.

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

Ad esempio:

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

Aggiornamento di un token di accesso

Un token di aggiornamento è una credenziale che utilizzi per ottenere un token di accesso, in genere dopo l'accesso token è scaduto o non è più valido. Viene restituito un token di aggiornamento nella risposta ricevere un token di accesso.

Per richiedere un nuovo token di accesso utilizzando un token di aggiornamento:

Richiesta di esempio

Per informazioni sulla codifica dell'intestazione dell'autenticazione di base nella chiamata seguente, vedi "Codifica delle credenziali di autenticazione di base".

$ curl -X POST \
  -H "Content-type: application/x-www-form-urlencoded" \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  https://myorg-test.apigee.net/my_oauth_endpoint/refresh_accesstoken \
  -d 'grant_type=refresh_token&refresh_token=my-refresh-token'

Parametri obbligatori

  • grant_type - Deve essere impostato sul valore refresh_token.
  • refresh_token - Il token di aggiornamento associato al token di accesso che hai che vuoi rinnovare.

Per impostazione predefinita, il criterio li cerca come parametri x-www-form-urlencoded specificato nel corpo della richiesta, come mostrato nell'esempio precedente. Per configurare una località alternativa per questi input, puoi usare <GrantType> e Elementi <RefreshToken> nel criterio OAuthV2. Per maggiori dettagli, vedi Criterio OAuthV2.

Parametri facoltativi

  • state - Una stringa che verrà inviata insieme alla risposta. Normalmente usata per evitare attacchi di falsificazione delle richieste tra siti.
  • scope - Consente di filtrare l'elenco dei prodotti API con cui è possibile usare un token. Per informazioni dettagliate sull'ambito, vedi Utilizzo degli ambiti OAuth2.

Autenticazione

  • client_id
  • client_secret

Devi passare l'ID client e il client secret come intestazione per autenticazione di base (con codifica Base64) o come parametri di forma client_id e client_secret. Consulta anche "Codifica delle credenziali di autenticazione di base".

Quando aggiorni un token di accesso, l'utente non deve ripetere l'autenticazione.

Di seguito è riportato un esempio di configurazione dell'endpoint per la generazione di un token di accesso utilizzando un token di aggiornamento. Verrà eseguito il criterio RefreshAccessToken.

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

Criterio di esempio

Questo è un criterio di base RefreshAccessToken configurato per accettare refresh_token tipo di autorizzazione. Per informazioni sugli elementi di configurazione facoltativi Per la configurazione con questo criterio, consulta la sezione Criterio OAuthV2.

<?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>

Restituisce

Se <GenerateResponse> è attivato, il criterio restituisce una risposta JSON contenente il nuovo token di accesso. Il tipo di concessione refresh_token supporta il mining sia di accesso e nuovi token di aggiornamento. Ad esempio:

{
    "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"
}

Tieni presente che, dopo aver generato un nuovo token di aggiornamento, l'originale non è più valido.

La risposta riportata sopra è ciò che ottieni se <GenerateResponse> è impostato su true. Se <GenerateResponse> viene impostato su false, il criterio non restituisce una risposta. Al contrario, compila il seguente insieme di variabili di contesto (flusso) con i dati relativi al la concessione del token di accesso.

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

Ad esempio:

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

Codifica credenziali di autenticazione di base

Quando effettui una chiamata API per richiedere un token o un codice di autorizzazione, è una buona pratica ed è consigliato dalla specifica OAuth 2.0 per passare i valori client_id e client_secret come Un'intestazione per l'autenticazione di base HTTP, come descritto in IETF RFC 2617. Per farlo, devi Codifica in base64 il risultato dell'unione dei due valori e dei due punti che li separano.

Nello pseudocodice:

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

In questo esempio, ns4fQc14Zg4hKFCNaSzArVuwszX95X è il client_id e ZIjFyTsNgQNyxI è il client secret.

A prescindere dal linguaggio di programmazione utilizzato per calcolare il valore con codifica Base64, per quelle date le credenziali del client, il risultato con codifica Base64 è: bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

Quindi, puoi effettuare la richiesta di token come segue:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

L'utilità curl creerà di fatto l'intestazione HTTP di base per te, se utilizzi l'opzione -u. Quanto segue è equivalente a quanto sopra:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -u 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

Altri ambienti di programmazione potrebbero avere scorciatoie simili che generano automaticamente il valore con codifica Base64.

Hashing dei token nel database

Per proteggere i token di accesso e di aggiornamento OAuth in caso di violazione della sicurezza del database, puoi: attivare l'hashing automatico dei token nella tua organizzazione Edge. Quando la funzionalità è abilitata, Edge crea automaticamente una versione sottoposta ad hashing dei token di accesso e di aggiornamento OAuth appena generati utilizzando l'algoritmo specificato. Di seguito vengono riportate informazioni sull'hashing collettivo dei token esistenti. La Vengono utilizzati token non sottoposti ad hashing nelle chiamate API ed Edge li convalida rispetto alle versioni con hash in del database.

Le seguenti proprietà a livello di organizzazione controllano l'hashing dei token OAuth.

features.isOAuthTokenHashingEnabled = true
features.OAuthTokenHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

Se disponi di token con hash esistenti e vuoi conservarli fino alla scadenza, imposta il valore le seguenti proprietà nella tua organizzazione, in cui l'algoritmo di hashing corrisponde a quello esistente (ad esempio, SHA1, la precedente versione predefinita di Edge). Se i token non erano sottoposti ad hashing, utilizza STANDARD.

features.isOAuthTokenFallbackHashingEnabled = true
features.OAuthTokenFallbackHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

Se sei un cliente Edge Cloud, contatta l'assistenza Apigee Edge per impostare questi nella tua organizzazione e, facoltativamente, eseguire l'hashing collettivo dei token esistenti.

Argomenti correlati