Nutzer mit SAML anmelden
In diesem Artikel erfahren Sie, wie Sie Nutzer mit Identity Platform bei einem SAML-Anbieter (Security Assertion Markup Language) 2.0 anmelden.
Hinweise
- 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.
- Aktivieren Sie Identity Platform und fügen Sie das Client SDK zu Ihrer Anwendung hinzu. Weitere Informationen finden Sie in der Kurzanleitung.
Anbieter konfigurieren
Rufen Sie in der Google Cloud Console die Seite Identitätsanbieter auf.
Zur Seite "Identitätsanbieter"Klicken Sie auf Anbieter hinzufügen und wählen Sie SAML aus der Liste aus.
Geben Sie die folgenden Informationen ein:
Name des Anbieters. Dieser kann die Anbieter-ID oder ein benutzerdefinierter Name sein. Wenn Sie einen benutzerdefinierten Namen eingeben, klicken Sie neben Anbieter-ID auf Bearbeiten, um die ID anzugeben. Diese muss mit
saml.
beginnen.Die Entitäts-ID des Anbieters.
Die SAML-SSO-URL des Anbieters.
Das Zertifikat, das für die Tokensignatur beim Anbieter verwendet wird. Achten Sie darauf, die Start- und Endstrings anzugeben. Beispiel:
-----BEGIN CERTIFICATE----- MIICajCCAdOgAwIBAgIBADANBgkqhkiG9w0BAQ0FADBSMQswCQYDVQQGEwJ1czEL ... LEzc1JwEGQQVDYQCwsQMSBDAF0QAB0w9GikhqkgBNADABIgABIwAgOdACCjaCIIM -----END CERTIFICATE-----
Geben Sie unter Dienstanbieter die Entitäts-ID Ihrer Anwendung ein. Das ist in der Regel die URL Ihrer Anwendung. Bei Ihrem SAML-Identitätsanbieter wird dies als Zielgruppe bezeichnet.
Fügen Sie Ihre Anwendung zur Liste der autorisierten Domains hinzu. Wenn die Anmelde-URL Ihrer Anwendung beispielsweise
https://example.com/login
lautet, fügen Sieexample.com
hinzu.Passen Sie gegebenenfalls die Callback-URL für Ihre Anwendung an. Die URL wird in der Regel von SAML-Identitätsanbietern für die ACS-URL (Assertion Consumer Service) verwendet.
Die Verwendung der Standard-Callback-URL vereinfacht die Validierung der SAML-Antwort. Wenn Sie diesen Ablauf anpassen, achten Sie darauf, dass die Callback-URL des Identity Platform-Projekts für Ihr Projekt in Ihrem SAML-Identitätsanbieter konfiguriert ist. Das sieht normalerweise so aus:
https://[PROJECT-ID].firebaseapp.com/__/auth/handler
. Weitere Informationen finden Sie unter Authentifizierungs-Handler anpassen.Klicken Sie auf Speichern.
Erforderliche Elemente für Anbieter
Identity Platform erwartet die Elemente <saml:Subject>
und <saml:NameID>
in Antworten des Anbieters.
Wenn Sie bei der Konfiguration des Anbieters keine Werte für diese Elemente definieren, schlägt die SAML-Assertion fehl.
Signieranfragen
Sie können die Sicherheit Ihrer Authentifizierungsanfragen erhöhen, indem Sie sie signieren.
Wenn Sie Anfragen signieren möchten, müssen Sie zuerst signierte Anfragen für Ihren Identitätsanbieter aktivieren. Rufen Sie dazu inboundSamlConfigs.patch()
auf und legen Sie idp_config.sign_request
auf true
fest:
REST
Ersetzen Sie diese Werte in den folgenden Anfragedaten:
project-id
: die ID des Google Cloud-Projektsprovider-id
: die SAML-Anbieter-ID
HTTP-Methode und URL:
PATCH https://identitytoolkit.googleapis.com/admin/v2/projects/project-id/inboundSamlConfigs/provider-id?updateMask=idpConfig.signRequest
JSON-Text anfordern:
{ "idp_config": { "sign_request": true } }
Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:
Sie müssen die REST API verwenden, um signierte Anfragen zu aktivieren; die Google Cloud Console oder die Google Cloud CLI werden nicht unterstützt.
Die Antwort ist ein InboundSamlConfig
-Objekt, das ein Array von SpCertificate
enthält.
Konfigurieren Sie den Wert des X509-Zertifikats mit Ihrem SAML-Identitätsanbieter, um die Signatur Ihrer Anfragen zu prüfen.
Nutzer anmelden
Wenn Sie einen Nutzer anmelden, verarbeitet das Client SDK die Authentifizierungsfehler und gibt dann ID-Tokens zurück, die die SAML-Attribute in ihren Nutzlasten enthalten. So melden Sie einen Nutzer an und rufen Attribute vom SAML-Anbieter ab:
Erstellen Sie eine
SAMLAuthProvider
-Instanz mit der Anbieter-ID, die Sie im vorherigen Abschnitt konfiguriert haben. Die Anbieter-ID muss mitsaml.
beginnen.Webversion 9
import { SAMLAuthProvider } from "firebase/auth"; const provider = new SAMLAuthProvider("saml.myProvider");
Webversion 8
const provider = new firebase.auth.SAMLAuthProvider('saml.myProvider');
Starten Sie den Anmeldevorgang. Sie können entweder ein Pop-up-Fenster oder eine Weiterleitung verwenden.
Pop-up
Webversion 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. // ... });
Webversion 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. // ... });
Weiterleiten
Rufen Sie
signInWithRedirect()
auf, um auf eine Anmeldeseite weiterzuleiten:Webversion 9
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Webversion 8
firebase.auth().signInWithRedirect(provider);
Rufen Sie dann
getRedirectResult()
auf, um die Ergebnisse abzurufen, wenn der Nutzer zu Ihrer Anwendung zurückgeleitet wird:Webversion 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. // ... });
Webversion 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. // ... });
Rufen Sie mithilfe der Anforderung
firebase.sign_in_attributes
die Nutzerattribute, die dem SAML-Anbieter zugeordnet sind, aus dem ID-Token ab. Prüfen Sie das ID-Token mit dem Admin SDK, wenn Sie es an Ihren Server senden.Das ID-Token enthält nur dann die E-Mail-Adresse des Nutzers, wenn sie im Attribut
NameID
der SAML-Assertion des Identitätsanbieters angegeben ist:<Subject> <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID> </Subject>
Dieser wird in das von Firebase ausgestellte ID-Token und in das Objekt UserInfo eingefügt.
Derzeit werden nur vom Dienstanbieter initiierte SAML-Abläufe aus dem Client SDK unterstützt.
Nutzerkonten verknüpfen
Wenn sich ein Nutzer bereits mit einer anderen Methode (z. B. E-Mail/Passwort) in Ihrer App angemeldet hat, können Sie sein vorhandenes Konto über linkWithPopup()
oder linkWithRedirect()
mit dem SAML-Anbieter verknüpfen:
Wir können beispielsweise eine Verknüpfung mit einem Google-Konto herstellen:
Webversion 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. // ... });
Webversion 8
auth.currentUser.linkWithPopup(provider).then((result) => { // Accounts successfully linked. var credential = result.credential; var user = result.user; // ... }).catch((error) => { // Handle Errors here. // ... });
Nächste Schritte
- Nutzer mit OIDC anmelden
- Bei der Anmeldung eine benutzerdefinierte Domain anzeigen
- OIDC- und SAML-Anbieter programmatisch verwalten