Ottenere i token OAuth 2.0

Questa pagina si applica a Apigee e Apigee ibridi.

Visualizza documentazione di Apigee Edge.

Questo documento mostra come ottenere i token di accesso e i codici di autorizzazione OAuth 2.0 con l'API Apigee. Viene spiegato anche come creare criteri per ogni tipo di autorizzazione OAuth 2.0. configurare gli endpoint proxy per accettare le richieste del client.

Utilizza il tipo di concessione del codice di autorizzazione

Questa sezione spiega come ottenere un token di accesso utilizzando il flusso di tipo di concessione del codice di autorizzazione. La richiesta di token per questo flusso richiede un codice di autorizzazione. Vedi Recuperare un codice di autorizzazione. Consulta anche Che cosa sono i tipi di autorizzazioni OAuth 2.0.

Richiesta di esempio

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' 

Parametri obbligatori

Per impostazione predefinita, questi parametri devono essere x-www-form-urlencoded e specificati nel corpo della richiesta (come mostrato nell'esempio sopra riportato); ma puoi modificare l'impostazione predefinita configurando <GrantType>, <Code> e <RedirectUri> nel criterio OAuthV2. Consulta le norme di OAuth 2.0.

  • grant_type: deve essere impostato sul valore authorization_code.
  • code - Il codice di autorizzazione. Consulta Richiedere un codice di autorizzazione.
  • redirect_uri - Devi fornire questo parametro se Il parametro redirect_uri è stato incluso nella richiesta del codice di autorizzazione. Se il parametro redirect_uri non era incluso nella richiesta del codice di autorizzazione e Se non fornisci questo parametro, questo criterio utilizza il valore dell'URL di callback fornita nell'app sviluppatore registrata.

Facoltativo parametri

  • state: una stringa che verrà inviata di nuovo con la risposta. Normalmente usata per evitare attacchi di falsificazione di 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.

Autorizzazione

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

Endpoint di esempio

Ecco una configurazione di endpoint di esempio per la generazione di un token di accesso. Verrà eseguito il criterio GenerateAccessToken, che deve essere configurato per supportare il tipo di concessione authorization_code.

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

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

Con <GenerateResponse> abilitato, 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> è impostato su false, il criterio non restituisce una 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

Utilizza il client tipo di concessione delle credenziali

Questa sezione spiega come ottenere un token di accesso utilizzando il flusso di tipo di concessione delle credenziali client. Consulta anche Che cosa sono i tipi di autorizzazioni OAuth 2.0.

Esempio richiesta

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"

Parametri obbligatori

  • grant_type: deve essere impostato sul valore client_credentials.

    Per impostazione predefinita, il parametro grant_type obbligatorio deve essere x-www-form-urlencoded e deve essere specificato nel corpo della richiesta (come mostrato nell'esempio precedente). Tuttavia, è possibile modificare questo valore predefinito configurando l'elemento <GrantType> nel criterio OAuthV2. Ad esempio, puoi scegliere di passare il parametro in un parametro di query. Per maggiori dettagli, vedi Criterio OAuthV2.

Facoltativo parametri

  • state: una stringa che verrà inviata di nuovo con la risposta. Normalmente usata per evitare attacchi di falsificazione di 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.

Autorizzazione

Devi passare l'ID client e il client secret come intestazione di autorizzazione di base (codificata in base64) o come parametri di modulo 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

Di seguito è riportata 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>
...

Norme di esempio

Questo è un criterio GenerateAccessToken di base configurato per accettare il tipo di concessione client_credentials. 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 -->
    <SupportedGrantTypes>
      <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Restituisce

Con <GenerateResponse> abilitato, 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 la risposta corretta. ma compila il seguente insieme di variabili di flusso con i dati relativi alla concessione dell'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

Utilizzare il tipo di concessione della password

Questa sezione spiega come ottenere un token di accesso utilizzando il flusso di tipo di concessione delle credenziali (password) del proprietario della risorsa. Vedi anche Implementare il tipo di concessione della password. Consulta anche Che cosa sono i tipi di autorizzazioni OAuth 2.0.

Richiesta di esempio

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"

Parametri obbligatori

Per impostazione predefinita, questi parametri devono essere x-www-form-urlencoded e specificati nel corpo della richiesta (come mostrato nell'esempio precedente). Tuttavia, è possibile modificare questo valore predefinito configurando gli elementi <GrantType>, <Username> e <Password> nel criterio OAuthV2. Consulta le norme di OAuth 2.0.

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.

Parametri facultativi

  • state: una stringa che verrà inviata di nuovo con la risposta. Normalmente usata per evitare attacchi di falsificazione di richieste tra siti.
  • scope: consente di filtrare l'elenco dei prodotti API con cui può essere utilizzato il token creato. Per informazioni dettagliate sull'ambito, vedi Utilizzo degli ambiti OAuth2.

Autorizzazione

Devi passare l'ID client e il client secret come intestazione di autorizzazione di base (codificata in base64) o come parametri di modulo client_id e client_secret. Puoi ottenere questi valori dall'app sviluppatore registrata associati alla richiesta. Vedi anche Codificare le credenziali di autenticazione di base.

Endpoint di esempio

Ecco un esempio di configurazione dell'endpoint per la generazione di un token di accesso. Verrà eseguito il criterio GenerateAccessToken, 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 GenerateAccessToken di base configurato per accettare il tipo di concessione della password. 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. Tieni presente che con il tipo di concessione della password vengono emessi sia un token di accesso sia un token di aggiornamento. Ad 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 la risposta corretta. ma compila il seguente insieme di variabili di flusso con i dati relativi alla concessione dell'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

Utilizza il tipo di autorizzazione implicita

Questa sezione spiega come ottenere un token di accesso utilizzando il flusso del tipo di concessione implicita. Vedi anche Che cosa sono i tipi di autorizzazione OAuth 2.0.

Esempio richiesta

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

Parametri obbligatori

Per impostazione predefinita, questi devono essere parametri di ricerca (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, consulta le norme di OAuth V2.

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 per sviluppatori registrata.
  • redirect_uri: questo parametro è obbligatorio se non è stato fornito un URI di callback al momento della registrazione dell'app per sviluppatori client. Se al client è stato fornito un URL di callback registrazione, verrà confrontato con questo valore e deve corrispondere esattamente.

Parametri facultativi

  • state: una stringa che verrà inviata di nuovo con la risposta. Normalmente usata per evitare attacchi di falsificazione di richieste tra siti.
  • scope: consente di filtrare l'elenco dei prodotti API con cui può essere utilizzato il token creato. Per informazioni dettagliate sull'ambito, vedi Utilizzo degli ambiti OAuth2.

Autorizzazione

Non richiede l'intestazione Authorization; Tuttavia, devi passare un ID client come parametro di richiesta.

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 parametro redirect_uri e viene aggiunto il token di accesso e la data e l'ora 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 la risposta corretta. ma compila il seguente insieme di variabili di flusso con i dati relativi alla concessione dell'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

Recuperare un codice di autorizzazione

Nel flusso del tipo di concessione del codice di autorizzazione, è necessario un codice di autorizzazione per ottenere un token di accesso. Vedi Utilizzare il tipo di concessione del codice di autorizzazione. Consulta anche Che cosa sono i tipi di autorizzazioni OAuth 2.0.

Richiesta di esempio

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"

Parametri obbligatori

Per impostazione predefinita, questi parametri devono essere parametri di query (come mostrato nell'esempio precedente); tuttavia, è possibile modificare questo valore predefinito configurando gli elementi <ResponseType>, <ClientId> e <RedirectUri> nel criterio OAuthV2. Per maggiori dettagli, vedi Criterio OAuthV2.

  • redirect_uri: se viene specificato un URI di callback completo (non parziale) in l'app client registrata, questo parametro è facoltativo; altrimenti è obbligatorio. Il callback è l'URL a cui Apigee invia il codice di autorizzazione appena creato. Consulta anche Registrare le app e gestire le chiavi API.
  • response_type - Deve essere impostato sul valore code.
  • client_id: l'ID client di un'app sviluppatore registrata.

Facoltativo parametri

  • redirect_uri: se nell'app client registrata è specificato un URI di callback completo (non parziale), questo parametro è facoltativo; in caso contrario, è obbligatorio. Il callback è l'URL a cui Apigee invia il codice di autorizzazione appena creato. Consulta anche Registrare le app e gestire le chiavi API.
  • state - Una stringa che verrà inviata insieme alla risposta. Normalmente usata per evitare attacchi di falsificazione di 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.

Autorizzazione

Non richiede l'intestazione Authorization, ma l'ID client dell'app client registrata deve essere fornito nella richiesta.

Norme di esempio

Questo è un criterio di baseGenerateAuthorizationCode. Per altre opzioni di configurazione, consulta i criteri 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 la risposta corretta. Ad esempio: ?code=123456.

Se <GenerateResponse> è impostato su false, il criterio non restituisce una risposta. ma compila 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. Un token di aggiornamento viene restituito nella risposta quando ricevi un token di accesso.

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://apitest.acme.com/oauth/refresh \
  -d "grant_type=refresh_token&refresh_token=yVSL38WpuN3Kzn1UTMoE6AQ4ANZM"

Parametri obbligatori

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 posizione alternativa per questi input, puoi utilizzare gli elementi <GrantType> e <RefreshToken> nel criterio OAuthV2. Per maggiori dettagli, consulta le norme di OAuth V2.

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

Parametri facoltativi

  • state - Una stringa che verrà inviata insieme alla risposta. Normalmente usata per evitare attacchi di falsificazione di 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.

Autorizzazione

Non richiede l'intestazione Authorization, ma l'ID client dell'app client registrata deve essere fornito nella richiesta.

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

Ecco un esempio di configurazione dell'endpoint per generare 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>
...

Norme 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 viene visualizzata se <GenerateResponse> è impostato su true. Se <GenerateResponse> è impostato su false, il criterio non restituisce una risposta. ma compila il seguente insieme di variabili di contesto (flusso) con i dati relativi alla 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 Autorizzazione 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'))

Dove: ns4fQc14Zg4hKFCNaSzArVuwszX95X è l'ID client e ZIjFyTsNgQNyxI è il client secret.

Esempi

Questo comando di esempio funziona su Linux e MacOS:

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

Poi, puoi effettuare la richiesta del token come segue:

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

Hashing dei token nel database

Apigee sottopone ad hashing tutti i token di accesso e aggiornamento OAuth per proteggerli in caso di violazione della sicurezza del database. Utilizzi token non sottoposti ad hashing nelle chiamate API e Apigee li convalida rispetto a le versioni con hash nel database.

Argomenti correlati