Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações
Versão: 1.3.1
Autentique-se 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, é possível conseguir um token com essa extensão, armazená-lo em cache usando a política PreencherCache e transmitir o token usando a política Service callout para acessar os serviços do Google Cloud de dentro de um fluxo de proxy de API.
Pré-requisitos
Este conteúdo fornece 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:
Verifique se a conta que a extensão vai usar (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 será autenticada.
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 de 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
Esta extensão solicita autenticação do Google Cloud representando um membro específico definido no seu projeto do Google Cloud. Você usa o arquivo JSON da conta de serviço do membro do projeto ao configurar essa 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 da 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) no ambiente de execução.
Geralmente, as etapas para autenticar o acesso a APIs dessa extensão serão as seguintes:
Verifique se a conta de serviço de membros que essa extensão representa tem acesso ao recurso do Google que você quer acessar. É possível usar 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 essa extensão.
Ao configurar uma política Extension callout para usar essa extensão, solicite a autenticação somente para os recursos aos quais o membro do seu projeto tem acesso.
Amostras
Os exemplos a seguir ilustram como se autenticar no Google Cloud usando a política ExtensionAnnotation.
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 AssignMessage a seguir recupera o valor da resposta da política ExtensionChamada acima 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, armazene em cache o token que você recebe. Para chamadas subsequentes que exigem um token, recuperar o token do cache do Apigee Edge é mais rápido do que receber um novo token. 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 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 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>
A política LookupCache a seguir tenta receber um token do cache. Se o token já tiver sido recebido e armazenado em cache, esta política vai recebê-lo para uso pelo proxy da 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 seguinte política Extension callout 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 que tenha 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 ExtensionCall recupera um novo token, a política FillCache o armazena em cache para uso futuro pelas 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 de API e as APIs do Google quando as APIs do Google exigirem 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 recupera o token OAuth, seu proxy de API pode 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 nos escopos do OAuth 2.0 para APIs do Google.
Para obter mais informações sobre interações de servidor para servidor com o OAuth 2.0, consulte Uso do 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, acesse Escopos do OAuth 2.0 para APIs do Google (em inglês). | Matriz | ["https://www.googleapis.com/auth/cloud-platform"] , que concede acesso a todas as APIs a que a conta de serviço tem acesso. |
Não. |
Resposta
Um objeto contendo o token de acesso, seu tipo e sua data de expiração 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. | Portador | Sim |
expiresInSec | Número de segundos até o token expirar. | 3600 | Sim |
getJWTAccessToken
Recebe um token de acesso JSON Web Token (JWT). Use esse token para fazer a autenticação com as APIs do Google se a API que você quer chamar tiver uma definição de serviço publicada no repositório GitHub das APIs do Google (em inglês).
Com algumas APIs do Google, você pode fazer chamadas de API autorizadas usando um JWT assinado diretamente como token do portador, em vez de um token de acesso OAuth 2.0. Quando isso é possível, você pode evitar ter que 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 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 e assim por diante. | 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. | Portador | Sim |
expiresInSec | Expira em segundos. | 3600 | Sim |
Referência de configuração
Use o seguinte ao configurar e implantar esta extensão para uso em proxies de API. Para ver as etapas para 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ões
Especifique valores para as seguintes propriedades de configuração 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 de gerenciamento, é um valor codificado em base64 gerado a partir de todo o arquivo JSON da chave da conta de serviço. | Nenhum | Sim |