Nutzer mit OIDC anmelden
In diesem Artikel erfahren Sie, wie Sie Nutzer mit Identity Platform bei einem OIDC-Anbieter (OpenID Connect) 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. 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
      (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
      (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 App hinzu. Weitere Informationen finden Sie in der Kurzanleitung.
- 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 OpenID Connect aus der Liste aus. 
- Geben Sie die folgenden Details ein, um den Autorisierungscode-Ablauf zu aktivieren: - Wählen Sie im Abschnitt Berechtigungstyp auswählen die Option Codeablauf aus. 
- 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 - oidc.beginnen.
- Client-ID des Anbieters. 
- Aussteller des Anbieters. Dieser sollte in etwa so aussehen: - https://example.com. Identity Platform verwendet diese URL zum Ermitteln des OIDC-Discovery-Dokuments. Dies finden Sie normalerweise unter- /.well-known/openid-configuration. Der Wert gibt die OAuth-Endpunkte und öffentlichen Schlüssel des Anbieters an.
- Den Clientschlüssel des Anbieters. 
 
- Fügen Sie Ihre Anwendung zur Liste der autorisierten Domains hinzu. Wenn die Anmelde-URL Ihrer Anwendung beispielsweise - https://example.com/loginlautet, fügen Sie- example.comhinzu.
- Konfigurieren Sie die Callback-URL der Identity Platform als Weiterleitungs-URL mit Ihrem OIDC-Anbieter. Die URL sollte in etwa so aussehen: - https://[PROJECT-ID].firebaseapp.com/__/auth/handler.
- Klicken Sie auf Speichern. 
- Geben Sie die folgenden Details ein, um den impliziten Ablauf zu aktivieren: - Wählen Sie im Abschnitt Grant-Typ auswählen die Option Impliziter Ablauf aus. 
- 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 - oidc.beginnen.
- Client-ID des Anbieters. 
- Aussteller des Anbieters. Dies sollte in etwa so aussehen wie - https://example.com., also jene URL, die Identity Platform verwendet, um das OIDC-Discovery-Dokument zu finden. Das Dokument gibt die OAuth-Endpunkte und den öffentlichen Schlüssel des Anbieters an und ist in der Regel unter- /.well-known/openid-configurationzu finden.
 
- Fügen Sie Ihre Anwendung zur Liste der autorisierten Domains hinzu. Wenn die Anmelde-URL Ihrer Anwendung beispielsweise - https://example.com/loginlautet, fügen Sie- example.comhinzu.
- Konfigurieren Sie die Callback-URL der Identity Platform als Weiterleitungs-URL mit Ihrem OIDC-Anbieter. Die URL sollte in etwa so aussehen: - https://[PROJECT-ID].firebaseapp.com/__/auth/handler.
- Klicken Sie auf Speichern. 
- OAuth-Ablauf verwenden. Dieser Ansatz schließt den OAuth-Handshake für Sie ab. Basierend auf der Auswahl des Autorisierungscode-Ablaufs/impliziten Ablaufs im Schritt zum Konfigurieren des Anbieters wählt der GCIP-Server den gewünschten Ablauf für die Kommunikation mit dem Identitätsanbieter aus. 
- ID-Token des OIDC-Anbieters verwenden Bei dieser Methode wird davon ausgegangen, dass Sie bereits ein OIDC-Token haben. 
- Erstellen Sie eine - OAuthProvider-Instanz mit der Anbieter-ID, die Sie im vorherigen Abschnitt konfiguriert haben. Die Anbieter-ID muss mit- oidc.beginnen.- Webversion 9- import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider("oidc.myProvider"); - Webversion 8- const provider = new firebase.auth.OAuthProvider('oidc.myProvider'); 
- Starten Sie den Anmeldevorgang. Sie können entweder ein Pop-up-Fenster oder eine Weiterleitung verwenden. - Pop-up- Webversion 9- import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // User is signed in. const credential = OAuthProvider.credentialFromResult(result); // This gives you an access token for the OIDC provider. You can use it to directly interact with that provider }).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 = OAuthProvider.credentialFromError(error); // Handle / display error. // ... }); - Webversion 8- firebase.auth().signInWithPopup(provider) .then((result) => { // User is signed in. // result.credential is a firebase.auth().OAuthCredential object. // result.credential.providerId is equal to 'oidc.myProvider'. // result.credential.idToken is the OIDC provider's ID token. }) .catch((error) => { // Handle 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).catch((error) => { // Handle error. }); - Rufen Sie dann - getRedirectResult()auf, um die Ergebnisse abzurufen, wenn der Nutzer zu Ihrer App zurückkehrt:- Webversion 9- import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // User is signed in. const credential = OAuthProvider.credentialFromResult(result); // This gives you an access token for the OIDC provider. You can use it to directly interact with that provider }) .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 = OAuthProvider.credentialFromError(error); // Handle / display error. // ... }); - Webversion 8- // On return. firebase.auth().getRedirectResult() .then((result) => { // User is signed in. // result.credential is a firebase.auth().OAuthCredential object. // result.credential.providerId is equal to 'oidc.myProvider'. // result.credential.idToken is the OIDC provider's ID token. }) .catch((error) => { // Handle / display error. // ... }); 
- Initialisieren Sie eine - OAuthProvider-Instanz mit der Anbieter-ID, die Sie im vorherigen Abschnitt konfiguriert haben. Die Anbieter-ID muss mit- oidc.beginnen. Erstellen Sie dann ein- OAuthCredentialund rufen Sie- signInWithCredential()auf, um den Nutzer anzumelden.- Webversion 9- import { getAuth, OAuthProvider, signInWithCredential } from "firebase/auth"; const auth = getAuth(); const credential = provider.credential({ idToken: oidcIdToken, }); signInWithCredential(auth, credential) .then((result) => { // User is signed in. const newCredential = OAuthProvider.credentialFromResult(result); // This gives you a new access token for the OIDC provider. You can use it to directly interact with that provider. }) .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 = OAuthProvider.credentialFromError(error); // Handle / display error. // ... }); - Webversion 8- const credential = provider.credential(oidcIdToken, null); firebase.auth().signInWithCredential(credential) .then((result) => { // User is signed in. // User now has a odic.myProvider UserInfo in providerData. }) .catch((error) => { // Handle / display error. // ... }); 
- Nutzer mit SAML anmelden
- Bei der Anmeldung eine benutzerdefinierte Domain anzeigen
- OIDC- und SAML-Anbieter programmatisch verwalten
Anbieter konfigurieren
Autorisierungscode-Ablauf
Impliziter Ablauf
Nutzer anmelden
Nutzer haben zwei Möglichkeiten, sich mit OIDC anzumelden:
Nutzer mit OAuth anmelden
So melden Sie sich mit OAuth an:
Am Ende jedes dieser Abläufe können Sie das OIDC-ID-Token mit dem Feld result.credential.idToken abrufen.
Nutzer direkt anmelden
So melden Sie einen Nutzer direkt mit einem OIDC-ID-Token an:
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 OIDC-Anbieter verknüpfen. Beispiel für die Verknüpfung mit einem Google-Konto:
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. // ... });