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
Acesse a página do IAP no console do Google Cloud.
Clique na guia APLICATIVOS.
Localize o app a ser configurado para usar contas de serviço.
Selecione Acessar a configuração do OAuth 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:
Acesse a página Provedores do Identity Platform no console do Google Cloud.
Acessar a página "Provedores do Identity Platform"Se você estiver usando a multilocação do Identity Platform, selecione o locatário associado ao recurso do IAP.
Clique em Adicionar provedor.
Selecione Google na lista de provedores.
Em Configuração do SDK da Web, insira o ID e a chave secreta do cliente que você conseguiu na seção anterior.
Clique em Salvar.
Se você já usa a autenticação do Google, pode usar seu cliente ID. Isso não interromperá os usuários atuais.
Acesse a página Provedores do Identity Platform na console do Google Cloud.
Acessar a página "Provedores do Identity Platform"Se você estiver usando a multilocação do Identity Platform, selecione o locatário associado ao recurso do IAP.
Localize Google na lista de provedores e clique em Editar.
Em IDs de cliente permitidos, clique em Adicionar.
Insira o ID do cliente que você recebeu na seção anterior.
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.