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.
Hinweis
- Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie noch kein Google Cloud-Konto haben, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify 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 und eine Anleitung finden Sie in der Kurzanleitung Nutzer mit einer E-Mail-Adresse mit Identity Platform anmelden.
Anbieter konfigurieren
Öffnen Sie in der Google Cloud console die Seite Identity Platform > Identitätsanbieter.
Zu den IdentitätsanbieternKlicken 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
samlbeginnen.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 im Bereich 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.
Klicken Sie im Seitenbereich Projekteinstellungen auf Domain hinzufügen und fügen Sie die Domain Ihrer Anwendung hinzu. Wenn die Anmelde-URL Ihrer Anwendung
https://example.com/loginlautet, fügen Sieexample.comhinzu.Führen Sie einen der folgenden Schritte aus, um die Einrichtung abzuschließen:
Kopieren Sie die Standard-Callback-URL für die Autorisierung aus dem Feld Callback-URL für die Autorisierung und fügen Sie sie der Konfiguration Ihrer SAML-Anwendung hinzu.
Die Verwendung der Standard-Callback-URL für die Autorisierung vereinfacht die Validierung der SAML-Antwort.
Fügen Sie der Konfiguration Ihrer SAML-Anwendung Ihre benutzerdefinierte Callback-URL für die Autorisierung hinzu, z. B.
https://PROJECT-ID.firebaseapp.com/__/auth/handler.
Klicken Sie im Bereich Anwendung konfigurieren auf Einrichtungsdetails. Kopieren Sie das Snippet in den Code Ihrer Anwendung, um das Identity Platform Client SDK zu initialisieren.
Klicken Sie auf Speichern.
Erforderliche Elemente des Anbieters
Identity Platform erwartet die <saml:Subject> und <saml:NameID> Elemente in Antworten vom Anbieter.
Wenn Sie beim Konfigurieren des Anbieters keine Werte für diese Elemente definieren, schlägt die SAML-Assertion fehl.
Anfragen signieren
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 folgende Werte in den Anfragedaten:
project-id: die ID für das Google Cloud Projektprovider-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 der Anfrage:
{
"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
Objekten enthält.
Konfigurieren Sie den Wert des X509-Zertifikats mit Ihrem SAML-Identitätsanbieter, um die Signatur Ihrer Anfragen zu prüfen.
Dienstleisterzertifikate rotieren
Bei Verwendung signierter SAML-Anfragen verwendet Identity Platform ein Dienstanbieterzertifikat (Service Provider, SP). Um Authentifizierungsunterbrechungen zu vermeiden, sollten Sie das Ablaufdatum Ihrer Dienstanbieterzertifikate im Blick behalten und sie rotieren, bevor sie ablaufen.
So prüfen Sie den Ablauf des Dienstanbieterzertifikats: Extrahieren Sie die Zeitstempel für den Ablauf des Zertifikats mit
jq:curl -s -X GET "https://identitytoolkit.googleapis.com/v2/projects/PROJECT_ID/inboundSamlConfigs" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "X-Goog-User-Project: PROJECT_ID" \ -H "Content-Type: application/json" | \ jq -r '.inboundSamlConfigs[].spConfig.spCertificates[]?.expiresAt'Ersetzen Sie
PROJECT_IDdurch Ihre Google Cloud Projekt-ID.Prüfen Sie den Wert
expiresAtunterspConfig.spCertificates.Wenn der Zeitstempel für den Ablauf (
expiresAt) innerhalb von 30 Tagen oder innerhalb des von Ihrer Organisation geforderten Zeitraums liegt, wenden Sie sich an Cloud Customer Care und Ihren Identitätsanbieteradministrator, um die Aktualisierung während einer geplanten Ausfallzeit zu planen.Wenden Sie sich an Cloud Customer Care, um das Zertifikat zu rotieren und das neue öffentliche Zertifikat zu erhalten.
Geben Sie das neue Dienstanbieterzertifikat für Ihren Identitätsanbieteradministrator frei, um die Zertifikatkonfiguration bei Ihrem Identitätsanbieter zu aktualisieren.
Testen Sie, ob die Einmalanmeldung (Single Sign-On, SSO) mit der aktualisierten Konfiguration funktioniert.
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 mitsamlbeginnen.Web version 9
import { SAMLAuthProvider } from "firebase/auth"; const provider = new SAMLAuthProvider("saml.myProvider");
Web version 8
const provider = new firebase.auth.SAMLAuthProvider('saml.myProvider');
Starten Sie den Anmeldevorgang. Sie können entweder ein Dialogfeld oder eine Weiterleitung verwenden.
Pop-up
Web version 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. // ... });
Web version 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:Web version 9
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web version 8
firebase.auth().signInWithRedirect(provider);
Rufen Sie dann
getRedirectResult()auf, um die Ergebnisse abzurufen, wenn der Nutzer zu Ihrer Anwendung zurückgeleitet wird:Web version 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. // ... });
Web version 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_attributesdie 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.Die E-Mail-Adresse des Nutzers ist nur dann im ID-Token enthalten, wenn sie im Attribut
NameIDder SAML-Assertion vom Identitätsanbieter angegeben ist:<Subject> <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID> </Subject>Dieser Wert wird im von Firebase ausgegebenen ID-Token und im UserInfo-Objekt 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 Anwendung angemeldet hat,
können Sie sein vorhandenes Konto über
den SAML-Anbieter mit linkWithPopup() oder linkWithRedirect() verknüpfen.
Das folgende Code-Snippet zeigt, wie Sie das Google-Konto eines Nutzers mit dem SAML-Anbieter verknüpfen:
Web version 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. // ... });
Web version 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