Nesta página, descrevemos algumas maneiras de adquirir um token de ID do OpenID Connect (OIDC) assinado pelo Google.
Para informações sobre o conteúdo e o ciclo de vida do token de código, consulte Tokens de ID.
Os tokens de ID têm um serviço ou aplicativo específico para que possam ser usados, especificados pelo valor da reivindicação aud
. Nesta página, usamos o termo serviço de destino para fazer referência ao serviço ou ao aplicativo em que o token de ID pode ser usado para autenticação.
Ao receber o token de ID, é possível incluí-lo em um
cabeçalho Authorization
na solicitação para o serviço de destino.
Métodos para receber um token de ID
Há várias maneiras de receber um token de ID. Nesta página, descrevemos os seguintes métodos:
- Receber um token de ID do servidor de metadados
- Usar um serviço de conexão para gerar um token de ID
- Gerar um token de ID com a representação de uma conta de serviço
Se um token de ID não for aceito por um aplicativo não hospedado noTrusted Cloud, provavelmente você poderá usar esses métodos. No entanto, determine as declarações de token de ID que o aplicativo exige.
Receber um token de ID do servidor de metadados
Quando o código está em execução em um recurso que pode ter uma conta de serviço anexada, o servidor de metadados do serviço associado pode, na maioria dos casos, fornecer um ID. token. O servidor de metadados gera tokens de ID para a conta de serviço anexada. Não é possível receber um token de ID com base nas credenciais de usuário do servidor de metadados.
É possível receber um token de ID do servidor de metadados quando o código é executado nos seguintes serviços do Trusted Cloud :
Para recuperar um token de ID do servidor de metadados, consulte o endpoint de identidade da conta de serviço, conforme mostrado neste exemplo.
curl
Substitua AUDIENCE
pelo URI do serviço de destino. Por exemplo, http://www.example.com
.
curl -H "Metadata-Flavor: Google" \ 'http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE'
PowerShell
Substitua AUDIENCE
pelo URI do serviço de destino. Por exemplo, http://www.example.com
.
$value = (Invoke-RestMethod ` -Headers @{'Metadata-Flavor' = 'Google'} ` -Uri "http://metadata/computeMetadata/v1/instance/service-accounts/default/identity?audience=AUDIENCE") $value
Java
Para executar este exemplo de código, primeiro conclua as seguintes etapas:
- Instale a biblioteca de cliente do Auth para Java
-
Defina a variável de ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN
comos3nsapis.fr
.
Go
Antes de executar exemplos de código, defina a variável de ambiente GOOGLE_CLOUD_UNIVERSE_DOMAIN
como s3nsapis.fr
.
Node.js
Para executar este exemplo de código, primeiro conclua as seguintes etapas:
- Instale a biblioteca do Google Auth para Node.js.
-
Defina a variável de ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN
comos3nsapis.fr
.
Python
Para executar este exemplo de código, primeiro conclua as seguintes etapas:
- Instale a biblioteca do Google Auth para Python.
-
Defina a variável de ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN
comos3nsapis.fr
.
Ruby
Para executar este exemplo de código, primeiro conclua as seguintes etapas:
- Instale a biblioteca do Google Auth para Ruby.
-
Defina a variável de ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAIN
comos3nsapis.fr
.
Usar um serviço de conexão para gerar um token de ID
Alguns serviços do Trusted Cloud ajudam você a chamar outros serviços. Esses serviços
de conexão podem ajudar a determinar quando a chamada é feita ou a gerenciar um fluxo de trabalho que
inclui a chamada do serviço. Os serviços a seguir podem incluir automaticamente um token de ID com o valor apropriado para a declaração aud
quando iniciarem uma chamada para um serviço que exige um token de ID:
- Pub/Sub
- O Pub/Sub permite a comunicação assíncrona entre os serviços. É possível configurar o Pub/Sub para que inclua um token de ID com uma mensagem. Para mais informações, consulte Autenticação para assinatura por push.
Gerar um token de ID com a representação de uma conta de serviço
A representação de uma conta de serviço permite que um principal gere credenciais de curta duração para uma conta de serviço confiável. O principal pode usar essas credenciais para autenticar como a conta de serviço.
Antes que um principal possa representar uma conta de serviço, ele precisa ter um papel do IAM nessa conta de serviço que permita a representação. Se a principal for outra conta de serviço, pode parecer mais fácil simplesmente fornecer as permissões necessárias diretamente para essa conta de serviço e ativá-la. Essa configuração, conhecida como autorepresentação, cria uma vulnerabilidade de segurança, porque permite que a conta de serviço crie um token de acesso que pode ser atualizado perpetuamente.
A representação da conta de serviço precisa sempre envolver dois principais: um principal que representa o autor da chamada e a conta de serviço que está sendo representada, chamada de conta de serviço com privilégios.
Para gerar um token de ID simulando uma conta de serviço, use o processo geral a seguir.
Para instruções passo a passo, consulte Criar um token de ID.
Identifique ou crie uma conta de serviço para ser a de serviço com privilégios.
- Consulte a documentação do produto para identificar os papéis necessários para invocar o serviço de destino. Conceda esses papéis à conta de serviço no serviço de destino.
Identifique o principal que executará a representação e configure o Application Default Credentials (ADC) para usar as credenciais do principal.
Para ambientes de desenvolvimento, o principal geralmente é a conta de usuário que você forneceu ao ADC usando a CLI gcloud. No entanto, se você está executando em um recurso com uma conta de serviço anexada, a conta de serviço anexada é a principal.
Conceda ao principal o papel de Criador de token de identidade do OpenID Connect da conta de serviço (
roles/iam.serviceAccountOpenIdTokenCreator
).Use a API IAM Credentials para gerar o token de ID da conta de serviço autorizada.
Substitua:
- AUDIENCE: o URI do serviço de destino. Por exemplo,
http://www.example.com
. - SERVICE_ACCOUNT_EMAIL: o endereço de e-mail da conta de serviço com privilégios.
curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{"audience": "AUDIENCE", "includeEmail": "true"}' \ https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT_EMAIL:generateIdToken
- AUDIENCE: o URI do serviço de destino. Por exemplo,
A seguir
- Entenda os tokens de ID.
- Use comandos do shell para consultar o servidor de metadados do Compute Engine.
- Saiba mais sobre os métodos de autenticação.