Estensione autenticazione Google

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

Versione: 1.0.2

Autentica con Google per accedere alle API di Google da te specificate.

Utilizza questa estensione per ottenere un token (OAuth o JWT) per i servizi Google Cloud, poi usalo per le chiamate successive all'API di Google, ad esempio utilizzando un criterio ServiceCallout.

Ad esempio, in un proxy API potresti ricevere un token con questa estensione, memorizzarlo nella cache usando il criterio compileCache e poi passarlo tramite il criterio ServiceCallout per accedere ai servizi Google Cloud dall'interno di un flusso di 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 le norme ExtensionCallout, devi:

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

  2. Utilizzare la console Google Cloud per generare una chiave per l'account di servizio.

  3. Utilizza i contenuti del file JSON della chiave dell'account di servizio risultante quando aggiungi e configuri l'estensione mediante il riferimento di configurazione.

Informazioni sull'autenticazione con Google Cloud

Questa estensione richiede l'autenticazione da Google Cloud in quanto rappresenta un membro specifico definito nel progetto Google Cloud. Utilizzerai il file JSON dell'account di servizio del membro del progetto quando configuri 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 di questa estensione dipende da una corrispondenza tra le autorizzazioni concesse nella console Google Cloud e l'accesso richiesto dall'estensione (tramite ambiti o pubblico) in fase di runtime.

In genere, i passaggi per l'autenticazione per l'accesso alle API da questa estensione sono i seguenti:

  1. Assicurati che l'account di servizio per membri rappresentato da questa estensione abbia accesso alla risorsa Google a cui vuoi accedere. Puoi utilizzare la pagina Cloud Identity and Access Management (Cloud IAM) di Google Cloud Console per concedere ruoli al membro del progetto rappresentato da questa estensione.

  2. Utilizza il file JSON della chiave dell'account di servizio del membro quando configuri questa estensione.

  3. Quando configuri un criterio ExtensionCallout per utilizzare questa estensione, richiedi l'autenticazione solo per le risorse a cui il membro del progetto ha accesso.

Esempi

I seguenti esempi illustrano come eseguire l'autenticazione con Google Cloud utilizzando le norme per le estensioni callout.

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 ha un aspetto 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 indicato sopra e lo copia nel payload della risposta. Questo può essere utile per il debug. In pratica, potresti non voler restituire il token al client.

<?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 un token di accesso nella cache

Per evitare di effettuare chiamate non necessarie per recuperare un token, valuta la possibilità di memorizzare nella cache il token che ricevi. Per le chiamate successive che richiedono un token, il recupero del token dalla cache di Apigee Edge sarà più rapido rispetto all'ottenimento di un nuovo token. Quando il token memorizzato nella cache scade, recupera un nuovo token e aggiorna la cache con questo token.

Il seguente codice 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 qui riguarda un criterio diverso nel flusso.

I seguenti criteri vengono eseguiti 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>
  1. 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 essere utilizzato dal 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>
    
  2. Se la ricerca nella cache non recupera 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>
    
  3. Dopo che il criterio ExtensionCallout ha recuperato un nuovo token, il criterio compileCache lo memorizza nella cache per essere utilizzato in un secondo momento dai 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

Riceve un token di accesso OAuth 2.0. Utilizza questa azione per supportare OAuth a due vie tra il proxy API e le API di Google quando le API di Google richiedono un token OAuth.

Nel protocollo OAuth a due vie, questa azione dell'estensione recupera un token OAuth mediante l'autenticazione con Google utilizzando un JSON dell'account di servizio (che aggiungi quando configuri questa estensione). Una volta che questa azione ha 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 ulteriori informazioni sulle interazioni server-to-server con OAuth 2.0, consulta l'articolo sull'utilizzo di OAuth 2.0 per applicazioni server-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, vedi 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 per le quali l'account di servizio ha accesso. No.

Risposta

Un oggetto contenente il token di accesso, il tipo e la data di scadenza nel seguente formato:

{
  "accessToken": "ewogICJ0eXB...C5jb20iCn0K",
  "token_type": "Bearer",
  "expiresInSec": 3600
}

Proprietà della risposta

Parametro Descrizione Predefinito Obbligatorio
accessToken Token di accesso OAuth 2.0. Nessuno
tokenType Tipo di token. Canale di trasporto
expiresInSec Numero di secondi alla scadenza del token. 3600

getJWTAccessToken

Ottiene un token di accesso JWT (JSON Web Token). Puoi utilizzare questo token per autenticarti con le API di Google se l'API che vuoi chiamare ha una definizione del servizio pubblicata nel repository GitHub delle API di Google.

Con alcune API di Google, puoi effettuare chiamate API autorizzate utilizzando un JWT firmato direttamente come token di connessione, anziché un token di accesso OAuth 2.0. Quando è possibile, puoi evitare di dover effettuare una richiesta di rete al server di autorizzazione di Google prima di effettuare una chiamata API.

Per ulteriori informazioni sull'autenticazione con un token di accesso JWT, consulta l'articolo sull'utilizzo di OAuth 2.0 per le applicazioni da server a 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. Possono essere inclusi un ID client protetto da Cloud IAP, un URL di Cloud Functions e così via. Nessuno

Risposta

{
  "accessToken": "token",
  "tokenType": "Bearer",
  "expiresInSec": 3600
}

Proprietà della risposta

Parametro Descrizione Predefinito Obbligatorio
accessToken Token di accesso. Nessuno
tokenType Tipo di token. Canale di trasporto
expiresInSec Scade in pochi secondi. 3600

Informazioni sulla configurazione

Quando configuri questa estensione e ne esegui il deployment da usare nei proxy API, usa quanto segue. Per la procedura di configurazione di un'estensione utilizzando la console Apigee, vedi Aggiungere e configurare 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
packageName Nome del pacchetto dell'estensione fornito da Apigee Edge. Nessuno
version Numero di versione del pacchetto dell'estensione da cui stai configurando un'estensione. Nessuno
configuration Valore di configurazione specifico per l'estensione che stai aggiungendo. Vedi Proprietà per questo pacchetto di estensioni Nessuno

Proprietà per questo pacchetto di estensioni

Specifica i valori per le seguenti proprietà di configurazione specifiche per 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, si tratta di un valore codificato in base64 generato dall'intero file JSON della chiave dell'account di servizio. Nessuno