Como usar contas de serviço com identidades externas

Neste artigo, você verá como autenticar usar contas de serviço ao utilizar o Identity-Aware Proxy (IAP) com identidades externas.

Como receber seu ID do cliente e chave secreta

  1. Acesse a página do IAP no console do Google Cloud .

    Acessar a página do IAP

  2. Clique na guia APLICATIVOS.

  3. Localize o app a ser configurado para usar contas de serviço.

  4. Selecione Acessar configuração do OAuth no menu de três pontos.

Uma página mostrando o ID do cliente e a chave secreta do seu app vai aparecer. Você precisará deles para configurar o Identity Platform na próxima seção.

Como configurar o Google como um provedor de identidade

Se o projeto do Identity Platform ainda não estiver usando o Google para autenticação, crie uma configuração com seu ID do cliente e sua chave secreta:

  1. Acesse a página Provedores do Identity Platform no consoleGoogle Cloud .
    Acessar a página "Provedores de identidade"

  2. Se você estiver usando a multilocação do Identity Platform, selecione o locatário associado ao recurso do IAP.

  3. Clique em Adicionar provedor.

  4. Selecione Google na lista de provedores.

  5. Em Configuração do SDK da Web, insira o ID do cliente e a chave secreta que você recebeu na seção anterior.

  6. Clique em Salvar.

Se você já usa a autenticação do Google, pode usar seu ID do cliente. Isso não interromperá os usuários atuais.

  1. Acesse a página Provedores do Identity Platform no consoleGoogle Cloud .
    Acessar a página "Provedores de identidade"

  2. Se você estiver usando a multilocação do Identity Platform, selecione o locatário associado ao recurso do IAP.

  3. Localize Google na lista de provedores e clique em Editar.

  4. Em IDs de clientes permitidos, clique em Adicionar.

  5. Insira o ID do cliente que você recebeu na seção anterior.

  6. Clique em Save.

Como trocar um token do Google por um token do Identity Platform

Quando você se autenticar pela primeira vez com o Google, o Identity Platform retornará um token de ID do Google. Para trocá-lo por um token do Identity Platform, chame signInWithIdp:

Node.js

import * as firebase from 'firebase/app';
import 'firebase/auth';

const config = {
  apiKey: '...',
};
firebase.initializeApp(config);
const cred = firebase.auth.GoogleAuthProvider.credential(google_oidc_id_token);
firebase.auth().signInWithCredential(cred)
  .then((userCredential) => {
    return userCredential.user.getIdToken();
  })
  .then((gcipIdToken) => {
    // This token can now be used to access the resource.
  })
  .catch((error) => {
    // Error occurred.
  });

Python

SIGN_IN_WITH_IDP_API = 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp'

def exchange_google_id_token_for_gcip_id_token(api_key, tenant_id, google_open_id_connect_token):
  url = SIGN_IN_WITH_IDP_API + '?key=' + api_key
  data={'requestUri': 'http://localhost',
        'returnSecureToken': True,
        'postBody':'id_token=' + google_open_id_connect_token + '&providerId=google.com',
        'tenantId': tenant_id}
  resp = requests.post(url, data)
  res = resp.json()
  return res['idToken']

REST

Solicitação:

POST https://identitytoolkit.googleapis.com/v1/accounts:signInWithIdp?key=API-KEY

Corpo:

{
"postBody":"id_token=GOOGLE-ID-TOKEN&providerId=google.com"
"requestUri": "http://localhost",
"returnIdpCredential": true,
"returnSecureToken": true,
"tenantId": "TENANT-ID"
}

Inclua o token de ID do Identity Platform no seu cabeçalho de autorização para acessar recursos por IAP:

curl -H "Authorization: Bearer GCIP-ID-TOKEN" "https://example.appspot.com/api"

Identidades externas não são compatíveis com o IAM. Por isso, você precisará atualizar manualmente o controle de acesso do app para conceder acesso à sua conta de serviço. Consulte JWTs para identidades externas para saber mais.