Estensione autenticazione Google

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Versione: 2.0.0

Esegui l'autenticazione con Google per accedere alle API di Google che hai specificato.

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

Ad esempio, in un proxy API potresti ottenere un token con questa estensione, memorizzarlo nella cache utilizzando il criterio PopulateCache, quindi passarlo utilizzando il criterio ServiceCallout per accedere ai servizi Google Cloud dall'interno di un flusso proxy API.

Prerequisiti

Questo contenuto fornisce 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:

  1. Assicurarti che l'account che verrà 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. Utilizzare i contenuti del file JSON della chiave dell'account di servizio risultante quando aggiungi e configuri l'estensione utilizzando il riferimento di 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. Quando configuri questa estensione, utilizzi il file JSON dell'account di servizio del membro del progetto.

Di conseguenza, questa estensione avrà accesso solo alle risorse per le quali il membro ha l'autorizzazione. In altre parole, l'autenticazione riuscita di questa estensione dipende dalla 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 del 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 assegnare ruoli al membro del progetto rappresentato da questa estensione.

  2. Utilizza il file JSON della chiave dell'account di servizio di quel 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

Gli esempi seguenti 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 di risposta è simile al seguente:

{
  "access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
  "token_type":"Bearer",
  "expiresInSec": 3600
}

Il seguente criterio AssignMessage recupera il valore di risposta dal criterio ExtensionCallout e lo copia nel payload della risposta. Questa operazione 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 nella cache un token di accesso

Per evitare di effettuare chiamate non necessarie per recuperare un token, valuta la possibilità 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 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 riportato si riferisce a un criterio diverso nel flusso.

I seguenti criteri vengono eseguiti nella sequenza descritta dal seguente XML di flusso:

  <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 recupererà 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>
    
  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 PopulateCache lo memorizza nella cache per un utilizzo 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

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

In OAuth a due vie, questa azione di estensione recupera un token OAuth eseguendo l'autenticazione con Google utilizzando un file JSON del service account (aggiungi il file JSON 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 tramite gli ambiti elencati in Ambiti OAuth 2.0 per le API di Google.

Per ulteriori informazioni sulle interazioni da server a server con OAuth 2.0, consulta Utilizzo di OAuth 2.0 per applicazioni da server a 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 ulteriori informazioni 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 il service account ha accesso. 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à 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 prima della scadenza del token. 3600

getJWTAccessToken

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

Con alcune API di Google, puoi effettuare chiamate API autorizzate utilizzando direttamente un JWT firmato come token di accesso, 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 Utilizzo di OAuth 2.0 per applicazioni da server a server.

Sintassi

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
    "audience" : "audience"
}]]></Input>

Esempio: URL di 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. 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 Scadenza in secondi. 3600

Riferimento di configurazione

Utilizza le seguenti informazioni quando configuri e implementi questa estensione per l'utilizzo nei proxy API. Per i passaggi per configurare un'estensione utilizzando la console Apigee, vedi Aggiungere e configurare un'estensione.

Proprietà comuni dell'estensione

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, questo è l'intero contenuto del file JSON della chiave dell'account di servizio. Se inviato utilizzando l'API Management, è un valore codificato in base64 generato dall'intero file JSON della chiave dell'account di servizio. Nessuno