Você está lendo a documentação do Apigee Edge.
Acesse a documentação da
Apigee X. info
Versão: 2.0.2
Autentique com o Google para acessar as APIs do Google especificadas.
Use essa extensão para receber um token (OAuth ou JWT) para serviços do Google Cloud e, em seguida, use o token para chamadas subsequentes à API do Google, como usando uma política ServiceCallout.
Por exemplo, em um proxy de API, você pode receber um token com essa extensão, armazenar em cache usando a política PopulateCache e transmitir o token usando a política ServiceCallout para acessar os serviços do Google Cloud em um fluxo de proxy de API.
Pré-requisitos
Este conteúdo fornece uma referência para configurar e usar essa extensão. Antes de usar a extensão de um proxy de API com a política ExtensionCallout, você precisa:
Verifique se a conta que a extensão vai usar (a conta representada pela conta de serviço que você usará para credenciais) tem acesso aos serviços do Google Cloud com que a extensão vai se autenticar.
Use o console do Google Cloud para gerar uma chave para a conta de serviço.
Use o conteúdo do arquivo JSON da chave da conta de serviço resultante ao adicionar e configurar a extensão usando 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 desse membro do projeto ao configurar a extensão.
Como resultado, essa extensão terá acesso apenas aos recursos para os 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 o acesso solicitado pela extensão (por escopos ou público-alvo) durante a execução.
Em geral, as etapas para autenticar o acesso às APIs dessa extensão são as seguintes:
Verifique se a conta de serviço do membro que essa extensão representa 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.
Use o JSON da chave da conta de serviço desse membro ao configurar a extensão.
Ao configurar uma política ExtensionCallout para usar essa extensão, solicite a autenticação apenas para recursos a que o membro do projeto tem acesso.
Amostras
Os exemplos a seguir ilustram como fazer a autenticação no Google Cloud usando a política ExtensionCallout.
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 é parecido com isto:
{
"access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
"token_type":"Bearer",
"expiresInSec": 3600
}
A política AssignMessage a seguir recupera o valor da resposta da política ExtensionCallout e o copia no payload da 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 fazer chamadas desnecessárias para recuperar um token, considere armazenar em cache o token recebido. Para chamadas subsequentes que exigem um token, recuperar o token do cache do Apigee Edge é mais rápido do que receber um novo. Quando o token em cache expirar, recupere um novo e atualize o cache com ele.
O código a seguir de um exemplo de proxy de API ilustra como definir e usar um token em cache para chamar a API Google Translation com uma política ServiceCallout. Cada exemplo de código aqui é para uma política diferente no fluxo.
As políticas a seguir são executadas na sequência descrita pelo XML de fluxo abaixo:
<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>
A política LookupCache a seguir tenta receber um token do cache. Se o token já tiver sido obtido e armazenado em cache, essa política o receberá para 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>Se a pesquisa de cache não recuperar um token armazenado em cache, a política ExtensionCallout a seguir vai recuperar um novo token do OAuth, especificando a API Cloud Translation do Google como o escopo do token. O Google Cloud retorna um token válido se as credenciais da conta de serviço usadas ao configurar a extensão
Google-Auth-Calloutrepresentarem 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>Depois que a política ExtensionCallout recupera um novo token, a política PopulateCache 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 essa ação para oferecer suporte ao OAuth de duas etapas entre o proxy de API e as APIs do Google quando elas exigem um token OAuth.
No OAuth de duas etapas, essa ação de 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 mais informações sobre interações de servidor para servidor 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 no seguinte formato:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
Propriedades da resposta
| Parâmetro | Descrição | Padrão | Obrigatório |
|---|---|---|---|
| accessToken | Token de acesso do OAuth 2.0. | Nenhum | Sim |
| tokenType | Tipo de token. | Bearer | Sim |
| expiresInSec | Número de segundos até a expiração do token. | 3600 | Sim |
getJWTAccessToken
Recebe um token de acesso JSON Web Token (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 do GitHub das APIs do Google.
Com algumas APIs do Google, é possível fazer chamadas de API autorizadas usando um JWT assinado diretamente como um token de portador, em vez de um token de acesso OAuth 2.0. Quando isso é possível, você evita ter que fazer uma solicitação de rede ao servidor de autorização do Google antes de fazer uma chamada de API.
Para mais informações sobre a autenticação com um token de acesso JWT, consulte 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 |
|---|---|---|---|
| audience [público-alvo] | Destinatário pretendido do token. Isso pode incluir um ID do cliente protegido pelo Cloud IAP, um URL do Cloud Functions | Nenhum | Sim |
Resposta
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
Propriedades da resposta
| Parâmetro | Descrição | Padrão | Obrigatório |
|---|---|---|---|
| accessToken | Token de acesso. | Nenhum | Sim |
| tokenType | Tipo de token. | Bearer | Sim |
| expiresInSec | Validade em segundos. | 3600 | Sim |
Referência de configuração
Use o seguinte ao configurar e implantar essa extensão para uso em proxies de API. Para saber como configurar uma extensão usando o console do Apigee, consulte Adicionar e configurar uma extensão.
Propriedades comuns de extensão
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 seguintes propriedades de configuração específicas dessa extensão.
| Propriedade | Descrição | Padrão | Obrigatório |
|---|---|---|---|
| credenciais | Quando inserido no console do Apigee Edge, esse é todo o conteúdo do arquivo JSON da chave da conta de serviço. Quando enviado usando a API Management, é um valor codificado em base64 gerado de todo o arquivo JSON da chave da conta de serviço. | Nenhum | Sim |