Estensione autenticazione Google

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Versione: 1.3.1

Esegui l'autenticazione 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 e 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 utilizzando il criterio PopulateCache, quindi trasmetterlo tramite il criterio ServiceCallout per accedere ai servizi Google Cloud dall'interno di un flusso proxy API.

Prerequisiti

Questi contenuti forniscono riferimento per la configurazione e l'utilizzo di questa estensione. Prima di utilizzare l'estensione da un proxy API con le norme relative ai callout estensione, devi:

  1. Assicurati che l'account che verrà utilizzato dall'estensione, 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. Utilizza 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 durante l'aggiunta e la configurazione dell'estensione utilizzando il riferimento di configurazione.

Informazioni sull'autenticazione con Google Cloud

Questa estensione richiede l'autenticazione a Google Cloud rappresentando un membro specifico definito nel tuo progetto Google Cloud. Quando configuri questa estensione, devi utilizzare il file JSON dell'account di servizio del membro del progetto.

Di conseguenza, questa estensione avrà accesso solo alle risorse per cui il membro è autorizzato. In altre parole, l'autenticazione riuscita da parte di questa estensione dipende da una corrispondenza tra le autorizzazioni concesse nella console Google Cloud e l'accesso richiesto dall'estensione (tramite ambiti o segmenti di 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 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.

  2. Usa il codice JSON della chiave dell'account di servizio del membro durante la configurazione di questa estensione.

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

Samples

I seguenti esempi illustrano come eseguire l'autenticazione con Google Cloud utilizzando le norme relative a ExtensionsCallout.

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 sarà simile al seguente:

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

Il seguente criterioAssignMessage recupera il valore di risposta dal criterio ExtensionCallout riportato sopra e lo copia nel payload della risposta. Questo può essere utile per il debug. Nella pratica, potrebbe non essere opportuno 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 inutili 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 al recupero di un nuovo token. Quando il token memorizzato nella cache scade, recupera un nuovo token e aggiorna la cache con il token.

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

I seguenti criteri vengono eseguiti nella sequenza descritta dal seguente codice 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 consentirà al proxy API di utilizzarlo.

      <?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. Una volta recuperato un nuovo token da parte del criterio ExtensionCallout, il criterio PopulateCache lo memorizza nella cache per poterlo utilizzare in un secondo momento dai criteri del 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 per 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 mediante l'autenticazione su Google utilizzando un JSON dell'account di servizio (che dovrai aggiungere quando configuri questa estensione). Dopo che questa azione recupera il token OAuth, il proxy API può utilizzarlo per effettuare chiamate alle API di Google, richiamando di fatto 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 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 richiesta

Parametro Descrizione Tipo Predefinito Obbligatorie
ambito Un array di ambiti OAuth 2.0. Per ulteriori informazioni sugli ambiti, consulta l'articolo 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. N.

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 Obbligatorie
accessToken Token di accesso OAuth 2.0. Nessuno
tokenType Tipo di token. Bearer
expiresInSec Numero di secondi prima della scadenza del token. 3600

getJWTAccessToken

Recupera un token di accesso per token web JSON (JWT). 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 un JWT firmato direttamente come token di connessione, anziché un token di accesso OAuth 2.0. Se possibile, evita 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, vedi Utilizzare OAuth 2.0 per 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 richiesta

Parametro Descrizione Predefinito Obbligatorie
audience Destinatario previsto del token. Questi possono includere 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 Obbligatorie
accessToken Token di accesso. Nessuno
tokenType Tipo di token. Bearer
expiresInSec Scade in pochi secondi. 3600

Riferimento per la configurazione

Utilizza quanto segue durante la configurazione e il deployment di questa estensione per l'utilizzo nei proxy API. Per i passaggi per configurare un'estensione utilizzando la console Apigee, consulta Aggiungere e configurare un'estensione.

Proprietà delle estensioni comuni

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 di questa estensione.

Proprietà Descrizione Predefinito Obbligatorie
credenziali Una volta inseriti nella console Apigee Edge, questo sarà l'intero contenuto del file JSON della chiave dell'account di servizio. Quando viene inviato tramite l'API di gestione, si tratta di un valore con codifica Base64 generato dall'intero file JSON della chiave dell'account di servizio. Nessuno