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
Aceda à página de IAP na Google Cloud consola.
Clique no separador APLICAÇÕES.
Localize a app que quer configurar para usar contas de serviço.
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:
Aceda à página Fornecedores da Identity Platform na Google Cloud consola.
Aceda à página Fornecedores de identidadeSe estiver a usar a funcionalidade multi-inquilino da Identity Platform, selecione o inquilino associado ao seu recurso de IAP.
Clique em Adicionar fornecedor.
Selecione Google na lista de fornecedores.
Em Configuração do SDK Web, introduza o ID de cliente e o segredo que obteve na secção anterior.
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.
Aceda à página Fornecedores da Identity Platform na Google Cloud consola.
Aceda à página Fornecedores de identidadeSe estiver a usar a funcionalidade multi-inquilino da Identity Platform, selecione o inquilino associado ao seu recurso de IAP.
Localize Google na lista de fornecedores e clique em Editar.
Em IDs de cliente permitidos, clique em Adicionar.
Introduza o ID de cliente que obteve na secção anterior.
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.