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.
-
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 -Konsole 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.
Autorisierungscode-Ablauf
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/login
lautet, fügen Sieexample.com
hinzu.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.
Impliziter Ablauf
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-configuration
zu finden.
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.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.
Nutzer anmelden
Nutzer haben zwei Möglichkeiten, sich mit OIDC anzumelden:
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.
Nutzer mit OAuth anmelden
So melden Sie sich mit OAuth an:
Erstellen Sie eine
OAuthProvider
-Instanz mit der Anbieter-ID, die Sie im vorherigen Abschnitt konfiguriert haben. Die Anbieter-ID muss mitoidc.
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 Anwendung zurückgeleitet wird: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. // ... });
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:
Initialisieren Sie eine
OAuthProvider
-Instanz mit der Anbieter-ID, die Sie im vorherigen Abschnitt konfiguriert haben. Die Anbieter-ID muss mitoidc.
beginnen. Erstelle dann eineOAuthCredential
und rufesignInWithCredential()
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. // ... });
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:
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 SAML anmelden
- Bei der Anmeldung eine benutzerdefinierte Domain anzeigen
- OIDC- und SAML-Anbieter programmatisch verwalten