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

  1. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, 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.
  2. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. Aktivieren Sie Identity Platform und fügen Sie Ihrer Anwendung das Client SDK hinzu. Weitere Informationen finden Sie in der Kurzanleitung.

Anbieter konfigurieren

  1. Rufen Sie in der Google Cloud Console die Seite Identitätsanbieter auf.
    Zur Seite "Identitätsanbieter"

  2. Klicken Sie auf Anbieter hinzufügen und wählen Sie SAML aus der Liste aus.

  3. Geben Sie die folgenden Informationen ein:

    1. 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.

    2. Die Entitäts-ID des Anbieters.

    3. Die SAML-SSO-URL des Anbieters.

    4. 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-----
      
  4. 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.

  5. 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 Sie example.com hinzu.

  6. 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.

  7. Klicken Sie auf Speichern.

Erforderliche Elemente für Anbieter

Identity Platform erwartet die Elemente <saml:Subject> und <saml:NameID> in Antworten vom Anbieter. Wenn Sie bei der Konfiguration des Anbieters keine Werte für diese Elemente angeben, 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

Bevor Sie die Anfragedaten verwenden, ersetzen Sie die folgenden Werte:

  • project-id: die ID des Google Cloud-Projekts
  • provider-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 Verwendung der Google Cloud Console oder der Google Cloud CLI wird 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:

  1. Erstellen Sie eine SAMLAuthProvider-Instanz mit der Anbieter-ID, die Sie im vorherigen Abschnitt konfiguriert haben. Die Anbieter-ID muss mit saml. beginnen.

    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');
  2. Starten Sie den Anmeldevorgang. Sie können entweder ein Pop-up-Fenster oder eine Weiterleitung verwenden.

    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');

    Weiterleiten

    Rufen Sie signInWithRedirect() auf, um zu einer 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 zu erhalten, wenn der Nutzer zu Ihrer App zurückkehrt:

    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.
        // ...
      });
  3. 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 vom Identitätsanbieter angegeben ist:

    <Subject>
      <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID>
    </Subject>
    

    Sie wird im von Firebase ausgestellten ID-Token und im 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-Adresse/Passwort) in Ihrer App angemeldet hat, können Sie sein bestehendes Konto über linkWithPopup() oder linkWithRedirect() mit dem SAML-Anbieter verknüpfen. Wir können z. B. eine Verknüpfung mit einem Google-Konto herstellen:

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