Extensão do Google Authentication

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Versão: 1.3.1

Faça a autenticação com o Google para acessar as APIs do Google que você especificar.

Use essa extensão para receber um token (OAuth ou JWT) para os serviços do Google Cloud e use-o nas chamadas subsequentes para a API do Google, por exemplo, usando uma política Service callout.

Por exemplo, em um proxy de API, você pode receber um token com essa extensão, armazenar em cache o token usando a política FillCache e transmiti-lo pela política Service callout para acessar os serviços do Google Cloud de um fluxo de proxy de API.

Pré-requisitos

Este conteúdo oferece referência para configurar e usar essa extensão. Antes de usar a extensão de um proxy de API com a política Extension callout, você precisa fazer o seguinte:

  1. Verifique se a conta usada pela extensão (a conta representada pela conta de serviço que você usará para as credenciais) tem acesso aos serviços do Google Cloud com que a extensão fará a autenticação.

  2. Gere uma chave para a conta de serviço com o console do Google Cloud.

  3. Use o conteúdo do arquivo JSON da chave da conta de serviço resultante ao adicionar e configurar a extensão com a referência de configuração.

Sobre a autenticação com o Google Cloud

Essa extensão solicita autenticação do Google Cloud representando um membro específico definido no seu projeto do Google Cloud. Use o arquivo JSON da conta de serviço do membro do projeto ao configurar essa extensão.

Como resultado, esta extensão só terá acesso aos recursos aos quais esse membro tem permissão. Em outras palavras, a autenticação bem-sucedida por essa extensão depende de uma correspondência entre as permissões concedidas no console do Google Cloud e do acesso solicitado pela extensão (por escopos ou público) no ambiente de execução.

Geralmente, as etapas de autenticação para acesso a APIs dessa extensão são as seguintes:

  1. Verifique se a conta de serviço de membro representada por essa extensão tem acesso ao recurso do Google que você quer acessar. Use a página do Cloud Identity and Access Management (Cloud IAM) no console do Google Cloud para conceder papéis ao membro do projeto que essa extensão representa.

  2. Use o JSON da chave da conta de serviço do membro ao configurar a extensão.

  3. Ao configurar uma política Extension callout para usar essa extensão, solicite autenticação apenas para os recursos aos quais o membro do seu projeto tem acesso.

Exemplos

Os exemplos a seguir ilustram como se autenticar no Google Cloud usando a política Extension callout.

Receber um token de acesso

No exemplo a seguir, a ação getOauth2AccessToken da extensão recupera um token para uso em solicitações à 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>

O valor da resposta é semelhante a este:

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

A política AttributionMessage a seguir recupera o valor da resposta da política Extension callout acima e o copia no payload de resposta. Isso pode ser útil para depuração. Na prática, talvez você não queira retornar o token ao 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>

Armazenar um token de acesso em cache

Para evitar chamadas desnecessárias para recuperar um token, armazene o token recebido em cache. Para chamadas subsequentes que exigem um token, a recuperação do token do cache do Apigee Edge será mais rápida do que a recuperação de um token novo. Quando o token em cache expirar, recupere um novo token e atualize o cache com ele.

O código a seguir de um exemplo de proxy de API mostra como definir e usar um token em cache para chamar a API Google Translation com uma política ServiceCallout. Cada exemplo de código é de uma política diferente no fluxo.

As políticas a seguir são executadas na sequência descrita pelo seguinte XML de fluxo:

  <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. A política LookupCache a seguir tenta receber um token do cache. Se o token já tiver sido obtido e armazenado em cache, esta política vai conseguir o uso pelo proxy de 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 a pesquisa de cache não recuperar um token armazenado em cache, a política Extension callout a seguir recupera um novo token OAuth, especificando a API Google Cloud Translation como o escopo do token. O Google Cloud retornará um token válido se as credenciais da conta de serviço usadas ao configurar a extensão Google-Auth-Callout representarem um membro do projeto com acesso à 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. Depois que a política Extension callout recupera um novo token, a política FillCache o armazena em cache para uso posterior por políticas no proxy de 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>
    

Ações

getOauth2AccessToken

Recebe um token de acesso do OAuth 2.0. Use esta ação para oferecer suporte ao OAuth de duas etapas entre o proxy da API e as APIs do Google quando as APIs do Google exigirem um token OAuth.

No OAuth de duas etapas, esta ação da extensão recupera um token OAuth autenticando com o Google usando um JSON de conta de serviço (você adiciona esse JSON ao configurar a extensão). Depois que essa ação recuperar o token OAuth, o proxy de API poderá usá-lo para fazer chamadas às APIs do Google, chamando as APIs em nome da conta de serviço do Google.

O acesso às APIs do Google Cloud é filtrado pelos escopos listados em Escopos do OAuth 2.0 para APIs do Google.

Para saber mais sobre as interações entre servidores com o OAuth 2.0, consulte Usar o OAuth 2.0 para aplicativos de servidor para servidor

Sintaxe

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
  "scope" : [
    "scope1",
    "scope2"
  ]
}]]></Input>

Exemplo

No exemplo a seguir, a ação getOauth2AccessToken da extensão recupera um token para uso em solicitações à API Cloud Translation.

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
    "scope" : [
      "https://www.googleapis.com/auth/cloud-translation"
  ]
}]]></Input>

Parâmetros de solicitação

Parâmetro Descrição Tipo Padrão Obrigatório
escopo Uma matriz de escopos do OAuth 2.0. Para saber mais sobre escopos, consulte Escopos do OAuth 2.0 para APIs do Google. Matriz ["https://www.googleapis.com/auth/cloud-platform"], que concede acesso a todas as APIs que a conta de serviço pode acessar. Não.

Resposta

Um objeto que contém o token de acesso, o tipo e a data de validade da seguinte forma:

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

Propriedades de resposta

Parâmetro Descrição Padrão Obrigatório
accessToken Token de acesso do OAuth 2.0. Nenhum Sim
tokenType Tipo de token. Portador Sim
expiresInSec Número de segundos até o token expirar. 3.600 Sim

getJWTAccessToken

Recebe um token de acesso de token da Web JSON (JWT). Você pode usar esse token para autenticar com as APIs do Google se a API que você quer chamar tiver uma definição de serviço publicada no repositório GitHub de APIs do Google.

Com algumas APIs do Google, é possível fazer chamadas de API autorizadas usando um JWT assinado diretamente como um token do portador, em vez de um token de acesso OAuth 2.0. Quando isso é possível, é possível evitar a necessidade de fazer uma solicitação de rede ao servidor de autorização do Google antes de fazer uma chamada de API.

Para saber mais sobre a autenticação com um token de acesso JWT, consulte Como usar o OAuth 2.0 para aplicativos de servidor para servidor.

Sintaxe

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

Exemplo: URL da função do Cloud

No exemplo a seguir, a ação getOauth2AccessToken da extensão recupera um token para uso em solicitações à API Cloud Translation.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>

Exemplo: ID do cliente protegido pelo Cloud IAP

No exemplo a seguir, a ação getOauth2AccessToken da extensão recupera um token para uso em solicitações à API Cloud Translation.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>

Parâmetros de solicitação

Parâmetro Descrição Padrão Obrigatório
Público-alvo (audience) Destinatário pretendido do token. Isso pode incluir um ID do cliente protegido pelo Cloud IAP, um URL do Cloud Functions e assim por diante. Nenhum Sim

Resposta

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

Propriedades de resposta

Parâmetro Descrição Padrão Obrigatório
accessToken token de acesso. Nenhum Sim
tokenType Tipo de token. Portador Sim
expiresInSec Expira em segundos. 3.600 Sim

Referência de configuração

Use o código a seguir ao configurar e implantar a extensão para uso em proxies de API. Para saber como configurar uma extensão usando o console da Apigee, consulte Como adicionar e configurar uma extensão.

Propriedades de extensão comuns

As propriedades a seguir estão presentes para cada extensão.

Propriedade Descrição Padrão Obrigatório
name Nome que será dado a esta configuração da extensão. Nenhum Sim
packageName Nome do pacote de extensão fornecido pelo Apigee Edge. Nenhum Sim
version Número da versão do pacote de extensão a partir do qual você está configurando uma extensão. Nenhum Sim
configuration Valor de configuração específico da extensão que você está adicionando. Consulte Propriedades para este pacote de extensão. Nenhum Sim

Propriedades deste pacote de extensão

Especifique valores para as propriedades de configuração a seguir específicas desta extensão.

Propriedade Descrição Padrão Obrigatório
credenciais Quando inserido no console do Apigee Edge, este é todo o conteúdo do arquivo JSON da chave da conta de serviço. Quando enviado pela API Management, ele é um valor codificado em base64 gerado em todo o arquivo JSON da chave da conta de serviço. Nenhum Sim