Accesso degli utenti con SAML
Questo documento mostra come utilizzare Identity Platform per far accedere gli utenti con un provider Security Assertion Markup Language (SAML) 2.0.
Prima di iniziare
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Abilita Identity Platform e aggiungi l'SDK del client alla tua app. Consulta le Guida rapida per scopri come.
Configurazione del provider
Vai alla pagina Provider di identità nella console Google Cloud.
Vai alla pagina Provider di identitàFai clic su Add a Provider (Aggiungi un provider) e seleziona SAML dall'elenco.
Inserisci i seguenti dettagli:
Il nome del fornitore. Può essere uguale all'ID fornitore o un nome personalizzato. Se inserisci un nome personalizzato, fai clic su Modifica accanto a Provider ID (ID provider) per specificare l'ID (che deve iniziare con
saml.
).L'ID entità del fornitore.
L'URL SSO SAML del provider.
Il certificato utilizzato per la firma del token sul provider. Assicurati di che includono le stringhe di inizio e fine. Ad esempio:
-----BEGIN CERTIFICATE----- MIICajCCAdOgAwIBAgIBADANBgkqhkiG9w0BAQ0FADBSMQswCQYDVQQGEwJ1czEL ... LEzc1JwEGQQVDYQCwsQMSBDAF0QAB0w9GikhqkgBNADABIgABIwAgOdACCjaCIIM -----END CERTIFICATE-----
In Fornitore di servizi, inserisci l'ID entità dell'app. Questo è di solito l'URL dell'app. Nel tuo provider di identità SAML, noto come segmento di pubblico.
Aggiungi la tua app all'elenco dei domini autorizzati. Ad esempio, se l'URL di accesso dell'app è
https://example.com/login
, aggiungiexample.com
.Se necessario, personalizza l'URL di callback per la tua app. Gli identity provider SAML lo chiamano comunemente URL Assertion Consumer Service (ACS).
L'utilizzo dell'URL di callback predefinito riduce la complessità della convalida della risposta SAML. Se personalizzi questo flusso, assicurati che l'URL di callback di Identity Platform per il tuo progetto sia configurato sul tuo provider di identità SAML. Di solito ha il seguente aspetto:
https://[PROJECT-ID].firebaseapp.com/__/auth/handler
. Consulta Personalizzazione di un gestore autenticazione per saperne di più.Fai clic su Salva.
Elementi obbligatori del provider
Identity Platform prevede che le risposte del provider siano gli elementi <saml:Subject>
e <saml:NameID>
.
Se non definisci i valori per questi elementi durante la configurazione del provider, l'asserzione SAML non riuscirà.
Richieste di firma
Puoi aumentare la sicurezza delle richieste di autenticazione firmandole.
Per firmare le richieste, abilita prima le richieste firmate per il tuo provider di identità
chiamata al numero inboundSamlConfigs.patch()
,
e l'impostazione di idp_config.sign_request
su true
:
REST
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
project-id
: l'ID del progetto Google Cloudprovider-id
: l'ID del provider SAML
Metodo HTTP e URL:
PATCH https://identitytoolkit.googleapis.com/admin/v2/projects/project-id/inboundSamlConfigs/provider-id?updateMask=idpConfig.signRequest
Corpo JSON della richiesta:
{ "idp_config": { "sign_request": true } }
Per inviare la richiesta, espandi una di queste opzioni:
Devi utilizzare l'API REST per abilitare le richieste firmate. utilizzando La console Google Cloud o Google Cloud CLI non è supportata.
La risposta è un
InboundSamlConfig
che include un array di SpCertificate
.
Configura il valore del certificato X509 con il tuo provider di identità SAML
può convalidare la firma delle tue richieste.
Accesso degli utenti
Quando un utente accede, l'SDK client gestisce il handshake di autenticazione, quindi restituisce token ID contenenti gli attributi SAML nei relativi payload. Per far accedere un utente e ottenere gli attributi dal provider SAML:
Crea una
SAMLAuthProvider
con l'ID provider che hai configurato nella sezione precedente. L'ID provider deve iniziare consaml.
.Versione web 9
import { SAMLAuthProvider } from "firebase/auth"; const provider = new SAMLAuthProvider("saml.myProvider");
Versione web 8
const provider = new firebase.auth.SAMLAuthProvider('saml.myProvider');
Avvia il flusso di accesso. Puoi scegliere di utilizzare un popup o un reindirizzamento.
Popup
Versione web 9
import { getAuth, signInWithPopup, SAMLAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // User is signed in. // Provider data available from the result.user.getIdToken() // or from result.user.providerData }).catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = SAMLAuthProvider.credentialFromError(error); // Handle / display error. // ... });
Versione web 8
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 / display error. // ... });
Reindirizzamento
Per reindirizzare a una pagina di accesso, chiama
signInWithRedirect()
:Versione web 9
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Versione web 8
firebase.auth().signInWithRedirect(provider);
Quindi, chiama
getRedirectResult()
per ottenere i risultati quando l'utente torna nella tua app:Versione web 9
import { getAuth, getRedirectResult, SAMLAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // User is signed in. // Provider data available from the result.user.getIdToken() // or from result.user.providerData }) .catch((error) => { // Handle Errors here. const errorCode = error.code; const errorMessage = error.message; // The email of the user's account used. const email = error.customData.email; // The AuthCredential type that was used. const credential = SAMLAuthProvider.credentialFromError(error); // Handle / display error. // ... });
Versione web 8
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 / display error. // ... });
Recupera gli attributi utente associati al provider SAML dal token identificativo utilizzando la rivendicazione
firebase.sign_in_attributes
. Assicurati di verificare il token ID utilizzando l'SDK Admin quando lo invii al tuo server.Il token ID include l'indirizzo email dell'utente solo se è fornito nell'attributo
NameID
dell'affermazione SAML del provider di identità:<Subject> <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID> </Subject>
Viene inserito nel token ID emesso da Firebase e nell'oggetto UserInfo.
Al momento, sono supportati solo i flussi SAML avviati dal fornitore di servizi dall'SDK client.
Collegamento degli account utente
Se un utente ha già eseguito l'accesso alla tua app utilizzando un metodo diverso (ad esempio email/password), puoi collegare il suo account esistente al provider SAML utilizzando linkWithPopup()
o linkWithRedirect()
:
Ad esempio, possiamo eseguire il collegamento con un Account Google:
Versione web 9
import { getAuth, linkWithPopup, GoogleAuthProvider } from "firebase/auth"; const provider = new GoogleAuthProvider(); const auth = getAuth(); linkWithPopup(auth.currentUser, provider).then((result) => { // Accounts successfully linked. const credential = GoogleAuthProvider.credentialFromResult(result); const user = result.user; // ... }).catch((error) => { // Handle Errors here. // ... });
Versione web 8
auth.currentUser.linkWithPopup(provider).then((result) => { // Accounts successfully linked. var credential = result.credential; var user = result.user; // ... }).catch((error) => { // Handle Errors here. // ... });
Passaggi successivi
- Accesso degli utenti con OIDC
- Visualizzazione di un dominio personalizzato durante l'accesso
- Gestione programmatica dei provider OIDC e SAML