Se você tiver atualizado para o Firebase Authentication com Identity Platform, poderá autenticar seus usuários com o Firebase usando o provedor de identidade SAML de sua preferência. Isso possibilita usar sua solução SSO baseada em SAML para conectar usuários ao seu aplicativo Firebase.
O Firebase Authentication é compatível apenas com o fluxo SAML iniciado pelo provedor de serviços.
Antes de você começar
Para conectar usuários usando um provedor de identidade SAML, você deve primeiro coletar algumas informações do provedor:
- O ID da entidade do provedor : um URI que identifica o provedor de identidade.
- URL SAML SSO do provedor : o URL da página de login do provedor de identidade.
- O certificado de chave pública do provedor : o certificado usado para validar tokens assinados pelo provedor de identidade.
- ID da entidade do seu aplicativo : um URI que identifica seu aplicativo, o "provedor de serviços".
Depois de obter as informações acima, ative o SAML como provedor de login para seu projeto do Firebase:
Se você ainda não atualizou para o Firebase Authentication com Identity Platform, faça-o. A autenticação SAML só está disponível em projetos atualizados.
Na página Provedores de login do Firebase Console, clique em Adicionar novo provedor e em SAML .
Dê um nome a este provedor. Observe o ID do provedor gerado: algo como
saml.example-provider
. Você precisará desse ID ao adicionar o código de login ao seu aplicativo.Especifique o ID da entidade, o URL SSO e o certificado de chave pública do seu provedor de identidade. Especifique também o ID da entidade do seu aplicativo (o provedor de serviços). Esses valores devem corresponder exatamente aos valores que seu provedor atribuiu a você.
Salve suas alterações.
Se você ainda não autorizou o domínio do seu aplicativo, adicione-o à lista de permissões na página Autenticação > Configurações do console do Firebase.
Lidar com o fluxo de login com o SDK do Firebase
Para lidar com o fluxo de login com o SDK JavaScript do Firebase, siga estas etapas:
Crie uma instância de
SAMLAuthProvider
usando o ID do provedor obtido no console do Firebase.API modular da Web
import { SAMLAuthProvider } from "firebase/auth"; const provider = new SAMLAuthProvider('saml.example-provider');
API com namespace da Web
var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider'); ``
Autentique-se com o Firebase usando o objeto do provedor SAML.
Você pode redirecionar o usuário para a página de login do provedor ou abrir a página de login em uma janela pop-up do navegador.
Redirecionar fluxo
Redirecione para a página de login do provedor chamando
signInWithRedirect()
:API modular da Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
API com namespace da Web
firebase.auth().signInWithRedirect(provider);
Depois que o usuário concluir o login e retornar ao seu aplicativo, você poderá obter o resultado do login chamando
getRedirectResult()
.API modular da Web
import { getAuth, getRedirectResult, SAMLAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // User is signed in. // Provider data available using getAdditionalUserInfo() }) .catch((error) => { // Handle error. });
API com namespace da Web
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. }) .catch((error) => { // Handle error. });
Fluxo pop-up
API modular da Web
import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .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. }) .catch((error) => { // Handle error. });
API com namespace da Web
firebase.auth().signInWithPopup(provider) .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. }) .catch((error) => { // Handle error. });
O token de ID e o objeto UserInfo contêm o endereço de e-mail do usuário somente se ele for fornecido no atributo
NameID
da declaração SAML do provedor de identidade:<Subject> <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID> </Subject>
Embora os exemplos acima se concentrem em fluxos de login, você pode usar o mesmo padrão para vincular um provedor SAML a um usuário existente usando
linkWithRedirect()
elinkWithPopup()
e autenticar novamente um usuário comreauthenticateWithRedirect()
ereauthenticateWithPopup()
, que pode ser usado para recuperar novas credenciais para operações confidenciais que exigem login recente.