Esta página descreve algumas formas de adquirir um token de ID do OpenID Connect (OIDC) assinado pela Google.
Para obter informações sobre os conteúdos e os prazos de validade dos tokens de ID, consulte o artigo Tokens de ID.
Os tokens de ID têm um serviço ou uma aplicação específicos para os quais podem ser usados,
especificados pelo valor da respetiva reivindicação aud. Este documento usa o termo serviço de destino para se referir ao serviço ou à aplicação para a qual o token de ID pode ser usado para autenticação.
Quando recebe o token de ID, pode incluí-lo num cabeçalho Authorization no pedido ao serviço de destino.
Métodos para obter um token de ID
Existem várias formas de obter um token de ID. Esta página descreve os seguintes métodos:
- Obtenha um token de ID do servidor de metadados
- Use um serviço de ligação para gerar um token de ID
- Gere um token de ID usando a identidade de uma conta de serviço
Se precisar que um token de ID seja aceite por uma aplicação não alojada em Cloud de Confiance, é provável que possa usar estes métodos. No entanto, deve determinar que reivindicações do token de ID a aplicação requer.
Obtenha um token de ID do servidor de metadados
Quando o seu código é executado num recurso que pode ter uma conta de serviço associada, o servidor de metadados do serviço associado pode normalmente fornecer um token de ID. O servidor de metadados gera tokens de ID para a conta de serviço anexada. Não pode obter um token de ID com base nas credenciais do utilizador a partir do servidor de metadados.
Pode obter um token de ID do servidor de metadados quando o seu código estiver em execução nos seguintes Cloud de Confiance serviços:
Para obter um token de ID do servidor de metadados, consulte o ponto final 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, tem de concluir primeiro os seguintes passos:
- Instale a biblioteca cliente de autenticação para Java
-
Defina a variável de ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAINparas3nsapis.fr.
Ir
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN environment
como s3nsapis.fr.
Node.js
Para executar este exemplo de código, tem de concluir primeiro os seguintes passos:
- Instale a biblioteca Google Auth para Node.js.
-
Defina a variável de ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAINparas3nsapis.fr.
Python
Para executar este exemplo de código, tem de concluir primeiro os seguintes passos:
- Instale a biblioteca Python Google Auth.
-
Defina a variável de ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAINparas3nsapis.fr.
Ruby
Para executar este exemplo de código, tem de concluir primeiro os seguintes passos:
- Instale a biblioteca Google Auth para Ruby.
-
Defina a variável de ambiente
GOOGLE_CLOUD_UNIVERSE_DOMAINparas3nsapis.fr.
Use um serviço de ligação para gerar um token de ID
Alguns Cloud de Confiance serviços ajudam a ligar para outros serviços. Estes serviços de ligação podem ajudar a determinar quando a chamada é feita ou gerir um fluxo de trabalho que inclui chamar o serviço. Os seguintes serviços podem incluir automaticamente um token de ID, com o valor adequado para a reivindicação aud, quando iniciam uma chamada para um serviço que requer um token de ID:
- Pub/Sub
- O Pub/Sub permite a comunicação assíncrona entre serviços. Pode configurar o Pub/Sub para incluir um token de ID com uma mensagem. Para mais informações, consulte o artigo Autenticação para subscrição push.
Gere um token de ID usando a identidade de uma conta de serviço
A utilização da identidade de uma conta de serviço permite que um principal gere credenciais de curta duração para uma conta de serviço fidedigna. Em seguida, o principal pode usar estas credenciais para se autenticar como a conta de serviço.
Antes de um principal poder usar a identidade de uma conta de serviço, tem de ter uma função do IAM nessa conta de serviço que permita a utilização da identidade. Se a conta principal for outra conta de serviço, pode parecer mais fácil fornecer simplesmente as autorizações necessárias diretamente a essa conta de serviço e permitir que se faça passar por si própria. Esta configuração, conhecida como representação automática, cria uma vulnerabilidade de segurança, porque permite que a conta de serviço crie um token de acesso que pode ser atualizado indefinidamente.
A representação da identidade de uma conta de serviço deve envolver sempre dois principais: um principal que representa o autor da chamada e a conta de serviço cuja identidade está a ser representada, denominada conta de serviço com privilégios.
Para gerar um token de ID usando a identidade de uma conta de serviço, use o seguinte processo geral.
Para instruções passo a passo, consulte o artigo Crie um token de ID.
Identifique ou crie uma conta de serviço para ser a conta de serviço com privilégios.
- Consulte a documentação do produto para identificar as funções necessárias para invocar o serviço de destino. Conceda estas funções à conta de serviço no serviço de destino.
Identifique o principal que vai realizar a representação e configure as Credenciais padrão da aplicação (ADC) para usar as credenciais deste principal.
Para ambientes de desenvolvimento, o principal é normalmente a conta de utilizador que forneceu ao ADC através da CLI gcloud. No entanto, se estiver a usar um recurso com uma conta de serviço anexada, a conta de serviço anexada é a principal.
Conceda ao principal a função de criador de tokens de identidade do OpenID Connect da conta de serviço (
roles/iam.serviceAccountOpenIdTokenCreator).Use a API IAM Credentials para gerar o token de ID para a conta de serviço autorizada.
Substitua o seguinte:
- AUDIENCE: o URI do serviço de destino, por exemplo,
http://www.example.com. - SERVICE_ACCOUNT_EMAIL: o endereço de email 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,
O que se segue?
- Compreenda os tokens de ID.
- Use comandos da shell para consultar o servidor de metadados do Compute Engine.
- Saiba mais acerca dos métodos de autenticação.