Jika telah mengupgrade ke Firebase Authentication with Identity Platform, Anda dapat mengautentikasi pengguna dengan Firebase menggunakan penyedia identitas SAML pilihan Anda. Hal ini memungkinkan Anda untuk menggunakan solusi SSO berbasis SAML untuk memproses login pengguna ke aplikasi Firebase Anda.
Firebase Authentication hanya mendukung alur SAML yang dimulai oleh penyedia layanan.
Sebelum memulai
Untuk memproses login pengguna menggunakan penyedia identitas SAML, Anda harus terlebih dahulu mengumpulkan sejumlah informasi dari penyedia:
- ID Entitas penyedia: URI yang mengidentifikasi penyedia identitas.
- URL SSO SAML penyedia: URL halaman login penyedia identitas.
- Public key certificate penyedia: Sertifikat yang digunakan untuk memvalidasi token yang ditandatangani oleh penyedia identitas.
- ID Entitas aplikasi Anda: URI yang mengidentifikasi aplikasi Anda, "penyedia layanan".
Setelah memiliki informasi di atas, aktifkan SAML sebagai penyedia login untuk project Firebase Anda:
Jika Anda belum mengupgrade ke Firebase Authentication with Identity Platform, lakukan hal tersebut terlebih dahulu. Autentikasi SAML hanya tersedia di project yang telah diupgrade.
Pada halaman Sign-in providers di Firebase console, klik Add new provider, lalu klik SAML.
Beri nama untuk penyedia ini. Catat ID penyedia yang dibuat: seperti
saml.example-provider
. Anda akan memerlukan ID ini saat menambahkan kode login ke aplikasi.Tentukan ID entitas penyedia identitas, URL SSO, dan public key certificate. Tentukan juga ID entitas aplikasi Anda (penyedia layanan). Nilai ini harus sama persis dengan nilai yang ditetapkan penyedia untuk Anda.
Simpan perubahan Anda.
Jika Anda belum memberikan otorisasi pada domain aplikasi, tambahkan domain tersebut ke daftar yang diizinkan di halaman Authentication > Settings di Firebase console.
Menangani alur login dengan Firebase SDK
Untuk menangani alur login dengan Firebase JavaScript SDK, ikuti langkah-langkah berikut:
Buat instance
SAMLAuthProvider
menggunakan ID penyedia yang Anda dapatkan di Firebase console.Web
import { SAMLAuthProvider } from "firebase/auth"; const provider = new SAMLAuthProvider('saml.example-provider');
Web
var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider'); ``
Lakukan autentikasi dengan Firebase menggunakan objek penyedia SAML.
Anda dapat mengalihkan pengguna ke halaman login penyedia atau membuka halaman login di jendela browser pop-up.
Alur pengalihan
Alihkan ke halaman login penyedia dengan memanggil
signInWithRedirect()
:Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
Setelah pengguna menyelesaikan proses login dan kembali ke aplikasi Anda, Anda bisa mendapatkan hasil login dengan memanggil
getRedirectResult()
.Web
import { getAuth, getRedirectResult, SAMLAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // User is signed in. // Provider data available using getAdditionalUserInfo() }) .catch((error) => { // Handle error. });
Web
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. }) .catch((error) => { // Handle error. });
Alur pop-up
Web
import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .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. }) .catch((error) => { // Handle error. });
Web
firebase.auth().signInWithPopup(provider) .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. }) .catch((error) => { // Handle error. });
Token ID dan objek UserInfo berisi alamat email pengguna hanya jika diberikan dalam atribut
NameID
pernyataan SAML dari penyedia identitas:<Subject> <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID> </Subject>
Meskipun contoh di atas berfokus pada alur login, Anda dapat menggunakan pola yang sama untuk menautkan penyedia SAML kepada pengguna yang ada menggunakan
linkWithRedirect()
danlinkWithPopup()
, lalu mengautentikasi ulang pengguna denganreauthenticateWithRedirect()
danreauthenticateWithPopup()
, yang dapat digunakan untuk mengambil kredensial baru untuk operasi sensitif yang memerlukan login terbaru.