Neste documento, você verá como usar o Identity Platform para fazer login dos usuários com um provedor de Linguagem de marcação para autorização de segurança (SAML, na sigla em inglês) 2.0.
Antes de começar
-
Faça login na sua conta do Google.
Se você ainda não tiver uma, inscreva-se.
-
No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.
-
Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.
- Ative o Identity Platform e adicione o SDK do cliente ao seu app. Veja o Guia de início rápido para saber como.
Como configurar o provedor
Acesse a página Provedores do Identity Platform no Console do Cloud.
Acessar a página "Provedores do Identity Platform"Clique em Adicionar um provedor e selecione SAML na lista.
Digite os seguintes detalhes:
O Nome do provedor. Ele pode ser igual ao ID do provedor ou um nome personalizado. Se você inserir um nome personalizado, clique em Editar ao lado de ID do provedor para especificar o ID (que precisa começar com
saml.
).O ID da entidade do provedor.
O URL de SSO SAML do provedor.
O certificado usado para assinar o token no provedor. Certifique-se de incluir as strings de início e término. Exemplo:
-----BEGIN CERTIFICATE----- MIICajCCAdOgAwIBAgIBADANBgkqhkiG9w0BAQ0FADBSMQswCQYDVQQGEwJ1czEL ... LEzc1JwEGQQVDYQCwsQMSBDAF0QAB0w9GikhqkgBNADABIgABIwAgOdACCjaCIIM -----END CERTIFICATE-----
Em Provedor de serviços, insira o ID da entidade do seu aplicativo. Normalmente, esse é o URL do seu aplicativo. No seu provedor de identidade SAML, isso é chamado de público.
Adicione seu app à lista de Domínios autorizados. Por exemplo, se o URL de login do seu aplicativo for
https://example.com/login
, adicioneexample.com
.Se necessário, personalize o URL de callback para seu app. Ele é comumente chamado de URL do serviço de declaração do consumidor (ACS, na sigla em inglês) por provedores de identidade SAML.
O uso do URL de callback padrão reduz a complexidade de validar a resposta SAML. Se você personalizar esse fluxo, verifique se o URL de callback do Identity Platform do projeto está configurado no provedor de identidade SAML. Geralmente, isso é algo como
https://<authDomain>/__/auth/handler
. Consulte Como personalizar um gerenciador de autenticação para saber mais.Clique em Save.
Como assinar as solicitações
É possível aumentar a segurança das suas solicitações de autenticação ao assiná-las.
Para assinar as solicitações, primeiro ative as solicitações assinadas para seu provedor de identidade.
Para fazer isso, chame inboundSamlConfigs.patch()
e defina idp_config.sign_request
como true
:
REST
Método HTTP e URL:
PATCH https://identitytoolkit.googleapis.com/admin/v2/projects/project-id/inboundSamlConfigs/provider-id?updateMask=idpConfig.signRequest
Corpo JSON da solicitação:
{ "idp_config": { "sign_request": true } }
Para enviar a solicitação, expanda uma destas opções:
Use a API REST para ativar as solicitações assinadas.
Não é possível fazer isso com o Console do Cloud ou a ferramenta de linha de comando gcloud
.
A resposta é um
objeto
InboundSamlConfig
, que inclui uma matriz de SpCertificate
.
Configure o valor do certificado X509 com seu provedor de identidade SAML para
que ele possa validar a assinatura das suas solicitações.
Como conectar usuários
Quando você faz login de um usuário, o SDK do cliente manipula o handshake de autenticação e, em seguida, retorna tokens de ID contendo os atributos SAML nos payloads deles. Para fazer login de um usuário e receber atributos do provedor de SAML:
Crie uma instância
SAMLAuthProvider
com o ID do provedor configurado na seção anterior. O ID do provedor precisa começar comsaml.
.const provider = new firebase.auth.SAMLAuthProvider('saml.myProvider');
Inicie o fluxo de login. É possível usar um pop-up ou um redirecionamento.
Pop-up
Para mostrar um pop-up, chame
signInWithPopup()
:firebase.auth().signInWithPopup(provider) .then((result) => { // User is signed in. // Identity provider data available in result.additionalUserInfo.profile, // or from the user's ID token obtained from result.user.getIdToken() // as an object in the firebase.sign_in_attributes custom claim // This is also available from result.user.getIdTokenResult() // idTokenResult.claims.firebase.sign_in_attributes. }) .catch((error) => { // Handle error. });
Redirect
Para redirecionar para uma página de login, chame
signInWithRedirect()
:firebase.auth().signInWithRedirect(provider);
Em seguida, chame
getRedirectResult()
para ver os resultados quando o usuário retornar ao app:firebase.auth().getRedirectResult() .then((result) => { // User is signed in. // Provider data available in result.additionalUserInfo.profile, // or from the user's ID token obtained from result.user.getIdToken() // as an object in the firebase.sign_in_attributes custom claim // This is also available from result.user.getIdTokenResult() // idTokenResult.claims.firebase.sign_in_attributes. }).catch((error) => { // Handle error. });
Recupere os atributos de usuário associados ao provedor SAML do token de ID usando a declaração
firebase.sign_in_attributes
. Verifique o token de ID usando o SDK Admin ao enviá-lo para seu servidor.
Atualmente, apenas os fluxos SAML iniciados pelo provedor de serviços a partir do SDK do cliente são compatíveis.
Como vincular contas de usuário
Se um usuário já tiver feito login no seu app usando um método diferente (como
e-mail/senha), você poderá vincular a conta dele ao provedor de SAML usando
linkWithPopup()
ou linkWithRedirect()
.
Exemplo:
const provider = new firebase.auth.SAMLAuthProvider('saml.myProvider');
// Link with a popup.
firebase.auth().currentUser.linkWithPopup(provider)
// currentUser.providerData now has an additional entry for this provider.
}).catch((error) => {
// Handle error.
});
Como autenticar novamente usuários
Determinadas operações confidenciais, como atualizar o e-mail ou a senha de um usuário, exigem
que o usuário tenha feito login recentemente. Para fazer login novamente, chame
reauthenticateWithPopup()
ou reauthenticateWithRedirect()
.
Exemplo:
const provider = new firebase.auth.SAMLAuthProvider('saml.myProvider');
// Reauthenticate with a popup.
firebase.auth().currentUser.reauthenticateWithPopup(provider)
.then((result) => {
// Get the updated ID token.
return result.user.getIdTokenResult();
})
.then((idTokenResult) => {
// idTokenResult.authTime should be updated to reflect recent sign-in status.
// idTokenResult.token has the latest ID token.
})
.catch((error) => {
// Handle error.
});
A seguir
- Como fazer login de usuários com OIDC
- Como mostrar um domínio personalizado durante o login
- Como gerenciar provedores OIDC e SAML de maneira programática