Usar contas de serviço com identidades externas

Este artigo mostra-lhe como fazer a autenticação através de contas de serviço quando usa o Proxy com reconhecimento de identidade (IAP) com identidades externas.

Obter o ID de cliente e o segredo

  1. Aceda à página de IAP na Google Cloud consola.

    Aceda à página de CIs

  2. Clique no separador APLICAÇÕES.

  3. Localize a app que quer configurar para usar contas de serviço.

  4. Selecione Aceder à configuração do OAuth no menu adicional.

É apresentada uma página com o ID de cliente e o segredo da sua app. Precisa destas informações para configurar a Identity Platform na secção seguinte.

Configurar o Google como um Fornecedor de identidade

Se o seu projeto do Identity Platform ainda não estiver a usar o Google para autenticação, crie uma nova configuração com o seu ID de cliente e segredo:

  1. Aceda à página Fornecedores da Identity Platform na Google Cloud consola.
    Aceda à página Fornecedores de identidade

  2. Se estiver a usar a funcionalidade multi-inquilino da Identity Platform, selecione o inquilino associado ao seu recurso de IAP.

  3. Clique em Adicionar fornecedor.

  4. Selecione Google na lista de fornecedores.

  5. Em Configuração do SDK Web, introduza o ID de cliente e o segredo que obteve na secção anterior.

  6. Clique em Guardar.

Se já estiver a usar a autenticação Google, pode usar o ID de cliente. Isto não vai interromper a experiência dos seus utilizadores existentes.

  1. Aceda à página Fornecedores da Identity Platform na Google Cloud consola.
    Aceda à página Fornecedores de identidade

  2. Se estiver a usar a funcionalidade multi-inquilino da Identity Platform, selecione o inquilino associado ao seu recurso de IAP.

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

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

  5. Introduza o ID de cliente que obteve na secção anterior.

  6. Clique em Guardar.

Trocar um token Google por um token da Identity Platform

Quando se autentica pela primeira vez com a Google, a Identity Platform devolve um token de ID Google. Em seguida, pode trocá-lo por um token da Identity Platform chamando 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

Pedido:

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 da Identity Platform no cabeçalho de autorização para aceder aos recursos através do IAP:

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

Tenha em atenção que as identidades externas não suportam o IAM, pelo que tem de atualizar manualmente o controlo de acesso da sua app para conceder acesso à sua conta de serviço. Consulte o artigo JWTs para identidades externas para saber mais.