Anda dapat mengizinkan pengguna melakukan autentikasi dengan Firebase menggunakan penyedia OAuth, seperti Microsoft Azure Active Directory, dengan mengintegrasikan Login OAuth umum ke aplikasi Anda menggunakan Firebase SDK untuk menjalankan alur login end to end.
Sebelum memulai
Untuk memproses login pengguna menggunakan akun Microsoft (akun Azure Active Directory dan akun Microsoft pribadi), Anda harus terlebih dahulu mengaktifkan Microsoft sebagai penyedia login untuk project Firebase:
- Tambahkan Firebase ke project JavaScript.
- Di Firebase console, buka bagian Auth.
- Pada tab Sign-in method, aktifkan penyedia Microsoft.
- Tambahkan Client ID dan Client Secret dari konsol developer penyedia tersebut ke konfigurasi penyedia:
- Untuk mendaftarkan klien OAuth Microsoft, ikuti petunjuk di Quickstart: Register an app with the Azure Active Directory v2.0 endpoint. Perlu diperhatikan bahwa endpoint ini mendukung login menggunakan akun pribadi Microsoft dan akun Azure Active Directory. Pelajari lebih lanjut Azure Active Directory v2.0.
- Saat mendaftarkan aplikasi ke penyedia ini, pastikan untuk mendaftarkan domain
*.firebaseapp.com
untuk project Anda sebagai domain pengalihan untuk aplikasi Anda.
- Klik Save.
Menangani alur login dengan Firebase SDK
Jika Anda membangun aplikasi web, cara termudah untuk mengautentikasi pengguna dengan Firebase menggunakan akun Microsoft mereka adalah dengan menangani seluruh alur login dengan Firebase JavaScript SDK.
Untuk menangani alur login dengan Firebase JavaScript SDK, ikuti langkah-langkah berikut:
Buat instance OAuthProvider menggunakan ID penyedia microsoft.com.
Web
import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('microsoft.com');
Web
var provider = new firebase.auth.OAuthProvider('microsoft.com');
Opsional: Tentukan parameter OAuth kustom tambahan yang ingin dikirim dengan permintaan OAuth.
Web
provider.setCustomParameters({ // Force re-consent. prompt: 'consent', // Target specific email with login hint. login_hint: 'user@firstadd.onmicrosoft.com' });
Web
provider.setCustomParameters({ // Force re-consent. prompt: 'consent', // Target specific email with login hint. login_hint: 'user@firstadd.onmicrosoft.com' });
Untuk mengetahui parameter yang didukung Microsoft, baca dokumentasi OAuth Microsoft. Perlu diperhatikan bahwa Anda tidak dapat meneruskan parameter yang diperlukan Firebase dengan
setCustomParameters()
. Beberapa parameter tersebut antara lain client_id, response_type, redirect_uri, state, scope, dan response_mode.Untuk mengizinkan hanya pengguna dari tenant Azure AD tertentu login ke aplikasi, nama domain sederhana tenant Azure AD atau ID GUID tenant dapat digunakan. Hal ini dapat dilakukan dengan menentukan kolom "tenant" di objek parameter kustom.
Web
provider.setCustomParameters({ // Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com' // or "common" for tenant-independent tokens. // The default value is "common". tenant: 'TENANT_ID' });
Web
provider.setCustomParameters({ // Optional "tenant" parameter in case you are using an Azure AD tenant. // eg. '8eaef023-2b34-4da1-9baa-8bc8c9d6a490' or 'contoso.onmicrosoft.com' // or "common" for tenant-independent tokens. // The default value is "common". tenant: 'TENANT_ID' });
Opsional: Tentukan cakupan OAuth 2.0 tambahan selain profil dasar yang ingin diminta dari penyedia autentikasi.
provider.addScope('mail.read'); provider.addScope('calendars.read');
Untuk mempelajari lebih lanjut, baca dokumentasi izin dan persetujuan Microsoft.
Lakukan autentikasi dengan Firebase menggunakan objek penyedia OAuth. Anda dapat meminta pengguna untuk login dengan Akun Microsoft, baik dengan menampilkan jendela pop-up maupun dengan mengalihkannya ke halaman login. Untuk perangkat seluler, sebaiknya gunakan metode pengalihan.
- Untuk login dengan jendela pop-up, panggil
signInWithPopup
:
Web
import { getAuth, signInWithPopup, OAuthProvider } from "firebase/auth"; const auth = getAuth(); signInWithPopup(auth, provider) .then((result) => { // User is signed in. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Web
firebase.auth().signInWithPopup(provider) .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
- Untuk login dengan beralih ke halaman login, panggil
signInWithRedirect
:
Ikuti praktik terbaik saat menggunakan
signInWithRedirect
,linkWithRedirect
, ataureauthenticateWithRedirect
.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 halaman, Anda dapat mengambil hasil login dengan memanggil
getRedirectResult
.Web
import { getAuth, getRedirectResult, OAuthProvider } from "firebase/auth"; const auth = getAuth(); getRedirectResult(auth) .then((result) => { // User is signed in. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Web
firebase.auth().getRedirectResult() .then((result) => { // IdP data available in result.additionalUserInfo.profile. // ... /** @type {firebase.auth.OAuthCredential} */ var credential = result.credential; // OAuth access and id tokens can also be retrieved: var accessToken = credential.accessToken; var idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Setelah berhasil diselesaikan, token akses OAuth yang terkait dengan penyedia dapat diambil dari objek
firebase.auth.UserCredential
yang ditampilkan.Dengan token akses OAuth, Anda dapat memanggil Microsoft Graph API.
Misalnya, untuk mendapatkan informasi profil dasar, REST API berikut dapat dipanggil:
curl -i -H "Authorization: Bearer ACCESS_TOKEN" https://graph.microsoft.com/v1.0/me
Tidak seperti penyedia lain yang didukung oleh Firebase Auth, Microsoft tidak menyediakan URL foto. Sebagai gantinya, data biner untuk foto profil harus diminta melalui Microsoft Graph API.
Selain token akses OAuth, token ID OAuth pengguna juga dapat diambil dari objek
firebase.auth.UserCredential
. Klaimsub
dalam token ID adalah khusus aplikasi dan tidak akan cocok dengan ID pengguna gabungan yang digunakan oleh Firebase Auth dan dapat diakses melaluiuser.providerData[0].uid
. Sebagai gantinya, kolom klaimoid
harus digunakan. Saat menggunakan tenant Azure AD untuk login, klaimoid
akan berupa pencocokan persis. Namun, untuk kasus non-tenant, kolomoid
akan diberi padding. Untuk ID gabungan4b2eabcdefghijkl
,oid
akan memiliki format00000000-0000-0000-4b2e-abcdefghijkl
.- Untuk login dengan jendela pop-up, panggil
Meskipun contoh di atas berfokus pada alur login, Anda juga dapat menautkan penyedia Microsoft ke pengguna yang ada menggunakan
linkWithPopup
/linkWithRedirect
. Misalnya, Anda dapat menautkan beberapa penyedia ke pengguna yang sama agar pengguna dapat login dengan salah satu penyedia tersebut.Web
import { getAuth, linkWithPopup, OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('microsoft.com'); const auth = getAuth(); linkWithPopup(auth.currentUser, provider) .then((result) => { // Microsoft credential is linked to the current user. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Web
var provider = new firebase.auth.OAuthProvider('microsoft.com'); firebase.auth().currentUser.linkWithPopup(provider) .then((result) => { // Microsoft credential is linked to the current user. // IdP data available in result.additionalUserInfo.profile. // OAuth access token can also be retrieved: // result.credential.accessToken // OAuth ID token can also be retrieved: // result.credential.idToken }) .catch((error) => { // Handle error. });
Pola yang sama dapat digunakan dengan
reauthenticateWithPopup
/reauthenticateWithRedirect
, yang dapat digunakan untuk mengambil kredensial baru untuk operasi sensitif yang memerlukan login terbaru.Web
import { getAuth, reauthenticateWithPopup, OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('microsoft.com'); const auth = getAuth(); reauthenticateWithPopup(auth.currentUser, provider) .then((result) => { // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // Get the OAuth access token and ID Token const credential = OAuthProvider.credentialFromResult(result); const accessToken = credential.accessToken; const idToken = credential.idToken; }) .catch((error) => { // Handle error. });
Web
var provider = new firebase.auth.OAuthProvider('microsoft.com'); firebase.auth().currentUser.reauthenticateWithPopup(provider) .then((result) => { // User is re-authenticated with fresh tokens minted and // should be able to perform sensitive operations like account // deletion and email or password update. // IdP data available in result.additionalUserInfo.profile. // OAuth access token can also be retrieved: // result.credential.accessToken // OAuth ID token can also be retrieved: // result.credential.idToken }) .catch((error) => { // Handle error. });
Melakukan autentikasi dengan Firebase di ekstensi Chrome
Jika Anda membangun aplikasi ekstensi Chrome, baca artikel Panduan Dokumen di Luar Layar.
Langkah berikutnya
Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan ditautkan ke kredensial, yaitu nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi, yang digunakan pengguna tersebut untuk login. Akun baru ini disimpan sebagai bagian dari project Firebase Anda, dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project, terlepas dari cara pengguna login.
-
Di aplikasi Anda, cara yang direkomendasikan untuk mengetahui status autentikasi pengguna adalah dengan menetapkan observer pada objek
Auth
. Selanjutnya, Anda bisa mendapatkan informasi profil dasar pengguna dari objekUser
. Baca bagian Mengelola Pengguna. Di Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda bisa mendapatkan ID pengguna unik milik pengguna yang login dari variabel
auth
, dan menggunakannya untuk mengontrol data yang dapat diakses oleh pengguna.
Anda dapat mengizinkan pengguna untuk login ke aplikasi menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.
Untuk memproses logout pengguna, panggil
signOut
:
Web
import { getAuth, signOut } from "firebase/auth"; const auth = getAuth(); signOut(auth).then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });
Web
firebase.auth().signOut().then(() => { // Sign-out successful. }).catch((error) => { // An error happened. });