Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.
Questo documento mostra come ottenere token di accesso e codici di autorizzazione OAuth 2.0 con l'API Apigee. Inoltre, mostriamo come creare criteri per ogni tipo di concessione OAuth 2.0 e come configurare gli endpoint proxy per accettare le richieste dei client.
Utilizzare il tipo di autorizzazione con 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. Consulta 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 precedente). Tuttavia, è possibile modificare questo valore predefinito configurando gli elementi <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 parametroredirect_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 fornito nell'app per sviluppatori registrata.
Parametri facoltativi
- state: una stringa che verrà inviata di nuovo con la risposta. In genere viene utilizzato per impedire attacchi di contraffazione delle richieste cross-site.
- 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 da un'app per sviluppatori registrata. Consulta 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 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 GenerateAccessToken di base configurato per accettare il tipo di concessione authorization_code
. 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 una 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. 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 concessione delle credenziali client
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.
Richiesta di esempio
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 esserex-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, consulta le norme di OAuth V2.
Parametri facoltativi
- state: una stringa che verrà inviata di nuovo con la risposta. In genere viene utilizzato per impedire attacchi di contraffazione delle richieste cross-site.
- 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 associata 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 client_credentials.
... <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. Tieni presente
che con il tipo di concessione client_credentials
, i token di aggiornamento non sono supportati. Viene creato solo 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>
è impostato su false, il criterio non restituisce una risposta. 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. Consulta 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.
In genere, le credenziali utente vengono convalidate in base a un archivio delle credenziali utilizzando un criterio LDAP o JavaScript.
- grant_type: deve essere impostato sul valore
password
. - username: il nome utente del proprietario della risorsa.
- password: la password del proprietario della risorsa.
Parametri facoltativi
- state: una stringa che verrà inviata di nuovo con la risposta. In genere viene utilizzato per impedire attacchi di contraffazione delle richieste cross-site.
- 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 associata 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> ...
Norme 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
Con <GenerateResponse>
abilitato, 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>
è impostato su false, il criterio non restituisce una risposta. 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. 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/implicit?response_type=token&client_id=c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ&redirect_uri=http://callback-example.com'
Parametri obbligatori
Per impostazione predefinita, questi parametri devono essere parametri di ricerca (come mostrato nell'esempio precedente); tuttavia,
è possibile modificare questa impostazione predefinita configurando gli elementi <ResponseType>
,
<ClientId>
e <RedirectUri>
nel criterio OAuthV2
associato a questo endpoint /token
. Per maggiori dettagli, consulta le norme di OAuth V2.
In genere, le credenziali utente vengono convalidate in base a un archivio delle credenziali utilizzando un callout del servizio LDAP o un criterio 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 è stato fornito un URL di chiamata al cliente durante la registrazione, verrà confrontato con questo valore e deve corrispondere esattamente.
Parametri facoltativi
- state: una stringa che verrà inviata di nuovo con la risposta. In genere viene utilizzato per impedire attacchi di contraffazione delle richieste cross-site.
- 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 della richiesta.
Endpoint di esempio
Ecco un esempio di configurazione dell'endpoint per la generazione di un token di accesso. Verrà eseguito il criterio GenerateAccessTokenImplicitGrant.
... <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> ...
Norme di esempio
Questo è un criterio GenerateAccessTokenImplicitGrant di base che elabora le richieste di token per il flusso di tipo di concessione implicita. Per informazioni sugli elementi di configurazione facoltativi che puoi configurare con questo criterio, consulta il 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
Con <GenerateResponse>
abilitato, il criterio restituisce un reindirizzamento Location 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 il tipo di autorizzazione implicita non supporta i token di aggiornamento. Ad esempio:
https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5
Se <GenerateResponse>
è impostato su false, il criterio non restituisce una risposta. 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. Consulta Utilizzare il tipo di autorizzazione con 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 ricerca (come mostrato nell'esempio precedente); tuttavia,
è possibile modificare questo valore predefinito configurando gli elementi <ResponseType>
,
<ClientId>
e <RedirectUri>
nel criterio OAuthV2. Per maggiori dettagli, consulta le norme di OAuth V2.
- 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.
- response_type: deve essere impostato sul valore
code
. - client_id: l'ID client di un'app per sviluppatori registrata.
Parametri facoltativi
- 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 di nuovo con la risposta. In genere viene utilizzato per impedire attacchi di contraffazione delle richieste cross-site.
- 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, ma l'ID client dell'app client registrata deve essere fornito nella richiesta.
Norme di esempio
Questo è un criterio GenerateAuthorizationCode di base. Per altre opzioni di configurazione, consulta i criteri OAuthV2:
<OAuthV2 name="GenerateAuthorizationCode"> <Operation>GenerateAuthorizationCode</Operation> <GenerateResponse enabled="true"/> </OAuthV2>
Restituisce
Con <GenerateResponse>
abilitato, il criterio restituisce il parametro di query ?code
alla posizione redirect_uri
(URI di callback) con il codice di autorizzazione
allegato. Viene inviato tramite un reindirizzamento del browser 302 con l'URL nell'intestazione Location della risposta. 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 che il token di accesso è 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 di autenticazione di base nella chiamata seguente, consulta Codificare le 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
specificati 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 vuoi rinnovare.
Parametri facoltativi
- state: una stringa che verrà inviata di nuovo con la risposta. In genere viene utilizzato per impedire attacchi di contraffazione delle richieste cross-site.
- 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, ma l'ID client dell'app client registrata deve essere fornito nella richiesta.
Quando viene aggiornato un token di accesso, non viene eseguita la riautenticazione dell'utente.
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 RefreshAccessToken di base configurato per accettare il tipo di concessione refresh_token
. Per informazioni sugli elementi di configurazione facoltativi che puoi configurare con questo criterio, consulta il 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
Con <GenerateResponse>
abilitato, il criterio restituisce una risposta JSON contenente il nuovo token di accesso. Il tipo di concessione refresh_token
supporta la creazione sia di token di accesso sia di 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 la creazione di 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 delle credenziali di autenticazione di base
Quando effettui una chiamata API per richiedere un token o un codice di autorizzazione, è buona prassi e consigliato dalla specifica OAuth 2.0 passare i valori client_id e client_secret come intestazione di autorizzazione HTTP-Basic, come descritto in IETF RFC 2617. Per farlo, devi codificare in base64 il risultato dell'unione dei due valori con un due punti che li separa.
In 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 in base alle versioni sottoposte ad hashing nel database.
Argomenti correlati
- Implementazione del tipo di concessione delle credenziali client
- Implementazione del tipo di autorizzazione con codice di autorizzazione
- Corso online sulla sicurezza delle API (include OAuth)
- Criteri OAuthV2: contiene molti esempi che mostrano come effettuare richieste all'authorization server e come configurare i criteri OAuthV2.