Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X. info
Versione: 2.0.0
Esegui l'autenticazione con Google per accedere alle API di Google che specifichi.
Utilizza questa estensione per ottenere un token (OAuth o JWT) per i servizi Google Cloud, quindi utilizza il token per le chiamate successive all'API Google, ad esempio utilizzando un regolamento ServiceCallout.
Ad esempio, in un proxy API potresti ottenere un token con questa estensione, memorizzare il token nella cache utilizzando il parametro PopulateCache e poi passare il token tramite il parametro ServiceCallout per accedere ai servizi Google Cloud da un flusso del proxy API.
Prerequisiti
Questi contenuti forniscono un riferimento per la configurazione e l'utilizzo di questa estensione. Prima di utilizzare l'estensione da un proxy API utilizzando il criterio ExtensionCallout, devi:
Assicurati che l'account utilizzato dall'estensione, ovvero l'account rappresentato dall'account di servizio che utilizzerai per le credenziali, abbia accesso ai servizi Google Cloud con cui l'estensione eseguirà l'autenticazione.
Utilizza la console Google Cloud per generare una chiave per l'account di servizio.
Utilizza i contenuti del file JSON della chiave dell'account di servizio risultante quando aggiungi e configuri l'estensione utilizzando il riferimento alla configurazione.
Informazioni sull'autenticazione con Google Cloud
Questa estensione richiede l'autenticazione da Google Cloud rappresentando un membro specifico definito nel tuo progetto Google Cloud. Utilizza il file JSON dell'account di servizio del membro del progetto durante la configurazione di questa estensione.
Di conseguenza, questa estensione avrà accesso solo alle risorse per le quali il membro dispone dell'autorizzazione. In altre parole, l'autenticazione riuscita da parte di questa estensione dipende dalla corrispondenza tra le autorizzazioni concesse nella console Google Cloud e l'accesso richiesto dall'estensione (tramite ambiti o segmenti di pubblico) in fase di esecuzione.
In genere, i passaggi per l'autenticazione per l'accesso alle API da questa estensione sono i seguenti:
Assicurati che l'account di servizio membro rappresentato da questa estensione abbia accesso alla risorsa Google a cui vuoi accedere. Puoi utilizzare la pagina Cloud Identity and Access Management (Cloud IAM) nella console Google Cloud per concedere ruoli al membro del progetto rappresentato da questa estensione.
Utilizza la chiave JSON dell'account di servizio del membro durante la configurazione di questa estensione.
Quando configuri un criterio ExtensionCallout per utilizzare questa estensione, richiedi l'autenticazione solo per le risorse a cui ha accesso il membro del progetto.
Esempi
I seguenti esempi illustrano come eseguire l'autenticazione con Google Cloud utilizzando il criterio ExtensionCallout.
Ottenere un token di accesso
Nell'esempio seguente, l'azione getOauth2AccessToken
dell'estensione recupera un token da utilizzare nelle richieste all'API Cloud Translation.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-Access-Token">
<DisplayName>Get Access Token</DisplayName>
<Connector>google-auth</Connector>
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
<Output>google.credentials</Output>
</ConnectorCallout>
Il valore della risposta è simile al seguente:
{
"access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
"token_type":"Bearer",
"expiresInSec": 3600
}
Il seguente criterio AssignMessage recupera il valore della risposta dal criterio ExtensionCallout riportato sopra e lo copia nel payload della risposta. Ciò può essere utile per il debug. In pratica, potresti non voler restituire il token al cliente.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Retrieve-Auth-Token">
<DisplayName>Retrieve Auth Token</DisplayName>
<AssignTo type="response" createNew="false"/>
<Set>
<Payload contentType="application/json">{google.credentials.access_token}</Payload>
</Set>
</AssignMessage>
Memorizzare nella cache un token di accesso
Per evitare di effettuare chiamate non necessarie per recuperare un token, ti consigliamo di memorizzare nella cache il token ricevuto. Per le chiamate successive che richiedono un token, il recupero del token dalla cache di Apigee Edge sarà più veloce rispetto all'ottenimento di un nuovo token. Quando il token memorizzato nella cache scade, recupera un nuovo token e aggiorna la cache con questo.
Il codice seguente di un proxy API di esempio illustra come impostare e utilizzare un token memorizzato nella cache per chiamare l'API Google Translation con un criterio ServiceCallout. Ogni esempio di codice riportato di seguito riguarda un criterio diverso nel flusso.
Le seguenti norme vengono eseguite nella sequenza descritta dal seguente flusso XML:
<Request>
<!-- Attempt to get a token from the cache. -->
<Step>
<Name>Get-Cached-Auth-Token</Name>
</Step>
<!-- Only execute the following ExtensionCallout policy if the call to the
cache couldn't retrieve a cached token. -->
<Step>
<Name>Google-Auth-Callout</Name>
<Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
</Step>
<!-- Only execute the following PopulateCache policy if the call to the
cache couldn't retrieve a cached token. -->
<Step>
<Name>Cache-Auth-Token</Name>
<Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
</Step>
<!-- Use the ServiceCallout policy to call the translate API. -->
<Step>
<Name>Translate-Text</Name>
</Step>
</Request>
Il seguente criterio LookupCache tenta di ottenere un token dalla cache. Se il token è già stato ottenuto e memorizzato nella cache, questo criterio lo acquisirà per l'utilizzo da parte del proxy API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <LookupCache async="false" continueOnError="false" enabled="true" name="Get-Cached-Auth-Token"> <DisplayName>Get Cached Auth Token</DisplayName> <!-- Give cache key and scope to specify the entry for the cached token. --> <CacheKey> <Prefix/> <KeyFragment>gcp_translate_token_</KeyFragment> </CacheKey> <Scope>Exclusive</Scope> <!-- Assign the retrieved token (if any) to a variable, where it can be retrieved by policies. --> <AssignTo>cloud.translation.auth.token</AssignTo> </LookupCache>
Se la ricerca nella cache non restituisce un token memorizzato nella cache, il seguente criterio ExtensionCallout recupera un nuovo token OAuth, specificando l'API Google Cloud Translation come ambito del token. Google Cloud restituisce un token valido se le credenziali dell'account di servizio utilizzate durante la configurazione dell'estensione
Google-Auth-Callout
rappresentano un membro del progetto che ha accesso all'API.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ConnectorCallout async="false" continueOnError="true" enabled="true" name="Google-Auth-Callout"> <DisplayName>Google-Auth-Callout</DisplayName> <Connector>example-auth-extension</Connector> <Action>getOauth2AccessToken</Action> <Input><![CDATA[{ "scope" : ["https://www.googleapis.com/auth/cloud-translation"] }]]></Input> <Output parsed="false">cloud.translation.auth.token</Output> </ConnectorCallout>
Dopo che il criterio ExtensionCallout ha recuperato un nuovo token, il criterio PopulateCache lo memorizza nella cache per un uso successivo da parte dei criteri nel proxy API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <PopulateCache async="false" continueOnError="false" enabled="true" name="Cache-Auth-Token"> <DisplayName>Cache Auth Token</DisplayName> <Properties/> <!-- Set cache key information to specify a unique key for this entry. --> <CacheKey> <Prefix/> <KeyFragment>gcp_translate_token_</KeyFragment> </CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <TimeoutInSec>5</TimeoutInSec> </ExpirySettings> <!-- Get the token to cache from the variable where the ExtensionCallout put it. --> <Source>cloud.translation.auth.token</Source> </PopulateCache>
Azioni
getOauth2AccessToken
Recupera un token di accesso OAuth 2.0. Utilizza questa azione per supportare OAuth a due passaggi tra il proxy API e le API di Google quando queste ultime richiedono un token OAuth.
In OAuth a due vie, questa azione dell'estensione recupera un token OAuth autenticandosi con Google utilizzando un account di servizio JSON (che aggiungi quando configuri questa estensione). Una volta recuperato il token OAuth, il proxy API può utilizzarlo per effettuare chiamate alle API di Google, chiamando effettivamente le API per conto dell'account di servizio Google.
L'accesso alle API Google Cloud viene filtrato in base agli ambiti elencati in Ambiti OAuth 2.0 per le API di Google.
Per saperne di più sulle interazioni server-to-server con OAuth 2.0, consulta l'articolo Utilizzo di OAuth 2.0 per applicazioni server-to-server.
Sintassi
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"scope1",
"scope2"
]
}]]></Input>
Esempio
Nell'esempio seguente, l'azione getOauth2AccessToken
dell'estensione recupera un token da utilizzare nelle richieste all'API Cloud Translation.
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
Parametri di richiesta
Parametro | Descrizione | Tipo | Predefinito | Obbligatorio |
---|---|---|---|---|
ambito | Un array di ambiti OAuth 2.0. Per saperne di più sugli ambiti, consulta Ambiti OAuth 2.0 per le API di Google. | Array | ["https://www.googleapis.com/auth/cloud-platform"] , che concede l'accesso a tutte le API a cui ha accesso l'account di servizio. |
No. |
Risposta
Un oggetto contenente il token di accesso, il relativo tipo e la relativa data di scadenza nel seguente formato:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
Proprietà di risposta
Parametro | Descrizione | Predefinito | Obbligatorio |
---|---|---|---|
accessToken | Token di accesso OAuth 2.0. | Nessuno | Sì |
tokenType | Tipo di token. | Canale di trasporto | Sì |
expiresInSec | Numero di secondi che mancano alla scadenza del token. | 3600 | Sì |
getJWTAccessToken
Recupera un token di accesso JSON Web Token (JWT). Puoi utilizzare questo token per autenticarti con le API Google se l'API che vuoi chiamare ha una definizione di servizio pubblicata nel repository GitHub delle API Google.
Con alcune API di Google, puoi effettuare chiamate API autorizzate utilizzando un JWT firmato direttamente come token bearer anziché un token di accesso OAuth 2.0. Se possibile, puoi evitare di dover effettuare una richiesta di rete al server di autorizzazione di Google prima di effettuare una chiamata API.
Per saperne di più sull'autenticazione con un token di accesso JWT, consulta l'articolo Utilizzo di OAuth 2.0 per applicazioni server-to-server.
Sintassi
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
Esempio: URL della funzione Cloud Functions
Nell'esempio seguente, l'azione getOauth2AccessToken
dell'estensione recupera un token da utilizzare nelle richieste all'API Cloud Translation.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>
Esempio: ID client protetto da Cloud IAP
Nell'esempio seguente, l'azione getOauth2AccessToken
dell'estensione recupera un token da utilizzare nelle richieste all'API Cloud Translation.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
Parametri di richiesta
Parametro | Descrizione | Predefinito | Obbligatorio |
---|---|---|---|
pubblico | Destinatario previsto del token. Può includere un ID client protetto da Cloud IAP, un URL di Cloud Functions e così via. | Nessuno | Sì |
Risposta
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
Proprietà di risposta
Parametro | Descrizione | Predefinito | Obbligatorio |
---|---|---|---|
accessToken | Token di accesso. | Nessuno | Sì |
tokenType | Tipo di token. | Canale di trasporto | Sì |
expiresInSec | Scadenza in secondi. | 3600 | Sì |
Riferimento alla configurazione
Utilizza quanto segue quando configuri ed esegui il deployment di questa estensione per utilizzarla nei proxy API. Per la procedura di configurazione di un'estensione utilizzando la console Apigee, vedi Aggiunta e configurazione di un'estensione.
Proprietà comuni delle estensioni
Per ogni estensione sono presenti le seguenti proprietà.
Proprietà | Descrizione | Predefinito | Obbligatorio |
---|---|---|---|
name |
Il nome che assegni a questa configurazione dell'estensione. | Nessuno | Sì |
packageName |
Nome del pacchetto dell'estensione fornito da Apigee Edge. | Nessuno | Sì |
version |
Numero di versione del pacchetto dell'estensione da cui stai configurando un'estensione. | Nessuno | Sì |
configuration |
Valore di configurazione specifico per l'estensione che stai aggiungendo. Vedi Proprietà per questo pacchetto di estensioni | Nessuno | Sì |
Proprietà per questo pacchetto di estensioni
Specifica i valori per le seguenti proprietà di configurazione specifiche di questa estensione.
Proprietà | Descrizione | Predefinito | Obbligatorio |
---|---|---|---|
credenziali | Se inserito nella console Apigee Edge, si tratta dell'intero contenuto del file JSON della chiave dell'account di servizio. Se inviato tramite l'API di gestione, è un valore con codifica base64 generato dall'intero file JSON della chiave dell'account di servizio. | Nessuno | Sì |