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 conseguir o ID e a chave secreta do cliente

  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 Go to OAuth configuration no menu flutuante.

Será exibida uma página com o ID e a chave secreta do cliente do seu app. Você precisará deles para configurar o Identity Platform na próxima seção.

Como configurar o Google como um provedor de identidade

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

  1. Acesse a página Provedores do Identity Platform no Console do Google Cloud.
    Acessar a página "Provedores do Identity Platform"

  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 e a chave secreta do cliente que você conseguiu na seção anterior.

  6. Clique em Save.

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

  1. Acesse a página Provedores do Identity Platform no Console do Google Cloud.
    Acessar a página "Provedores do Identity Platform"

  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 do cliente 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 Como proteger o aplicativo com cabeçalhos assinados para mais informações.