Memproses login pengguna dengan OIDC
Dokumen ini menunjukkan cara menggunakan Identity Platform untuk membuat pengguna login dengan penyedia OpenID Connect (OIDC).
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
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.
- Aktifkan Identity Platform, dan tambahkan SDK klien ke aplikasi Anda. Lihat Mulai Cepat untuk mempelajari caranya.
Mengonfigurasi penyedia
Buka halaman Penyedia Identitas di konsol Google Cloud .
Buka halaman Penyedia IdentitasKlik Tambahkan Penyedia, lalu pilih OpenID Connect dari daftar.
Alur Kode Otorisasi
Masukkan detail berikut untuk mengaktifkan Alur Kode Otorisasi:
Pilih Code Flow di bagian Choose grant type.
Nama penyedia. ID ini bisa sama dengan ID penyedia, atau nama kustom. Jika Anda memasukkan nama kustom, klik Edit di samping ID Penyedia untuk menentukan ID (yang harus dimulai dengan
oidc.).Client ID penyedia.
Penerbit penyedia. Tampilannya akan terlihat seperti
https://example.com. Identity Platform menggunakan URL ini untuk menemukan dokumen penemuan OIDC (biasanya ditemukan di/.well-known/openid-configuration), yang menentukan endpoint OAuth dan kunci publik penyedia.Rahasia Klien penyedia.
Tambahkan aplikasi Anda ke daftar Domain yang Diizinkan. Misalnya, jika URL login aplikasi Anda adalah
https://example.com/login, tambahkanexample.com.Konfigurasi URL callback Identity Platform sebagai URL pengalihan dengan penyedia OIDC Anda. URL akan terlihat seperti
https://[PROJECT-ID].firebaseapp.com/__/auth/handler.Klik Simpan.
Alur Implisit
Masukkan detail berikut untuk mengaktifkan Alur Implisit:
Pilih Implicit Flow di bagian Choose grant type.
Nama penyedia. ID ini bisa sama dengan ID penyedia, atau nama kustom. Jika Anda memasukkan nama kustom, klik Edit di samping ID Penyedia untuk menentukan ID (yang harus dimulai dengan
oidc.).Client ID penyedia.
Penerbit penyedia. URL ini akan terlihat seperti
https://example.com.Identity Platform menggunakan URL ini untuk menemukan dokumen penemuan OIDC (biasanya ditemukan di/.well-known/openid-configuration), yang menentukan endpoint OAuth dan kunci publik penyedia.
Tambahkan aplikasi Anda ke daftar Domain yang Diizinkan. Misalnya, jika URL login aplikasi Anda adalah
https://example.com/login, tambahkanexample.com.Konfigurasi URL callback Identity Platform sebagai URL pengalihan dengan penyedia OIDC Anda. URL akan terlihat seperti
https://[PROJECT-ID].firebaseapp.com/__/auth/handler.Klik Simpan.
Pengguna sedang login
Ada dua cara untuk login pengguna dengan OIDC:
Menggunakan alur OAuth. Dengan cara ini, handshake OAuth akan selesai untuk Anda. Berdasarkan pemilihan Alur Kode Otorisasi/Alur Implisit pada langkah mengonfigurasi penyedia, server GCIP memilih alur yang diinginkan untuk berkomunikasi dengan Penyedia Identitas.
Menggunakan token ID penyedia OIDC. Cara ini mengasumsikan bahwa Anda sudah memiliki token OIDC.
Memproses login pengguna dengan OAuth
Untuk login menggunakan OAuth:
Buat instance
OAuthProviderdengan ID penyedia yang Anda konfigurasi di bagian sebelumnya. ID penyedia harus dimulai denganoidc..Web versi 9
import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider("oidc.myProvider");
Web versi 8
const provider = new firebase.auth.OAuthProvider('oidc.myProvider');
Mulai alur login. Anda dapat memilih untuk menggunakan pop-up atau pengalihan.
Pop-up
Web versi 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. // ... });
Web versi 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. });
Pengalihan
Untuk mengalihkan ke halaman login, panggil
signInWithRedirect():Web versi 9
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web versi 8
firebase.auth().signInWithRedirect(provider).catch((error) => { // Handle error. });
Kemudian, panggil
getRedirectResult()untuk mendapatkan hasilnya saat pengguna kembali ke aplikasi Anda:Web versi 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. // ... });
Web versi 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. // ... });
Di akhir alur mana pun, Anda bisa mendapatkan token ID OIDC menggunakan kolom
result.credential.idToken.
Membuat pengguna login secara langsung
Untuk memproses login pengguna dengan token ID OIDC secara langsung, lakukan hal berikut:
Lakukan inisialisasi instance
OAuthProviderdengan ID penyedia yang Anda konfigurasi di bagian sebelumnya. ID penyedia harus dimulai denganoidc.. Kemudian, buatOAuthCredential, dan panggilsignInWithCredential()untuk membuat pengguna login.Web versi 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. // ... });
Web versi 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. // ... });
Menautkan akun pengguna
Jika pengguna telah login ke aplikasi Anda menggunakan metode lain (seperti email/sandi), Anda dapat menautkan akun yang sudah ada ke penyedia OIDC menggunakan linkWithPopup() atau linkWithRedirect():
Misalnya, kita dapat menautkan dengan Akun Google:
Web versi 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 versi 8
auth.currentUser.linkWithPopup(provider).then((result) => { // Accounts successfully linked. var credential = result.credential; var user = result.user; // ... }).catch((error) => { // Handle Errors here. // ... });
Langkah berikutnya
- Memproses login pengguna dengan SAML
- Menampilkan domain kustom selama login
- Mengelola penyedia OIDC dan SAML secara terprogram