شما میتوانید با ادغام ورود عمومی OAuth در برنامه خود با استفاده از Firebase SDK برای انجام جریان ورود به سیستم سرتاسری، به کاربران خود اجازه دهید تا با استفاده از ارائهدهندگان OAuth مانند Microsoft Azure Active Directory، با Firebase احراز هویت کنند.
قبل از اینکه شروع کنی
برای ورود کاربران با استفاده از حسابهای مایکروسافت (Azure Active Directory و حسابهای شخصی مایکروسافت)، ابتدا باید مایکروسافت را به عنوان ارائهدهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
- فایربیس را به پروژه جاوا اسکریپت خود اضافه کنید .
- در کنسول Firebase ، به بخش امنیت > احراز هویت بروید.
- در تب روش ورود ، ارائه دهنده ورود به سیستم مایکروسافت را فعال کنید.
- شناسه کلاینت و راز کلاینت را از کنسول توسعهدهنده آن ارائهدهنده به پیکربندی ارائهدهنده اضافه کنید:
- برای ثبت یک کلاینت Microsoft OAuth، دستورالعملهای موجود در Quickstart را دنبال کنید: یک برنامه را با نقطه پایانی Azure Active Directory v2.0 ثبت کنید . توجه داشته باشید که این نقطه پایانی از ورود به سیستم با استفاده از حسابهای شخصی مایکروسافت و همچنین حسابهای Azure Active Directory پشتیبانی میکند. درباره Azure Active Directory v2.0 بیشتر بدانید.
- هنگام ثبت برنامهها در این ارائهدهندگان، حتماً دامنه
*.firebaseapp.comرا برای پروژه خود به عنوان دامنه تغییر مسیر برای برنامه خود ثبت کنید.
- روی ذخیره کلیک کنید.
مدیریت جریان ورود به سیستم با Firebase SDK
اگر در حال ساخت یک برنامه وب هستید، سادهترین راه برای تأیید اعتبار کاربران خود با Firebase با استفاده از حسابهای مایکروسافت آنها، مدیریت کل جریان ورود به سیستم با Firebase JavaScript SDK است.
برای مدیریت جریان ورود به سیستم با استفاده از Firebase JavaScript SDK، مراحل زیر را دنبال کنید:
با استفاده از شناسه ارائه دهنده microsoft.com، یک نمونه از OAuthProvider ایجاد کنید.
Web
import { OAuthProvider } from "firebase/auth"; const provider = new OAuthProvider('microsoft.com');
Web
var provider = new firebase.auth.OAuthProvider('microsoft.com');
اختیاری : پارامترهای سفارشی اضافی OAuth را که میخواهید با درخواست 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' });
برای پارامترهایی که مایکروسافت پشتیبانی میکند، به مستندات OAuth مایکروسافت مراجعه کنید. توجه داشته باشید که نمیتوانید پارامترهای مورد نیاز Firebase را با
setCustomParameters()ارسال کنید. این پارامترها عبارتند از client_id ، response_type ، redirect_uri ، state ، scope و response_mode .برای اینکه فقط کاربران یک مستاجر خاص Azure AD بتوانند وارد برنامه شوند، میتوان از نام دامنه آشنای مستاجر Azure AD یا شناسه GUID مستاجر استفاده کرد. این کار را میتوان با مشخص کردن فیلد "مستاجر" در شیء پارامترهای سفارشی انجام داد.
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' });
اختیاری : محدودههای اضافی OAuth 2.0 فراتر از پروفایل پایه که میخواهید از ارائهدهنده احراز هویت درخواست کنید را مشخص کنید.
provider.addScope('mail.read'); provider.addScope('calendars.read');برای کسب اطلاعات بیشتر، به مستندات مجوزها و رضایتنامههای مایکروسافت مراجعه کنید.
با استفاده از شیء ارائه دهنده OAuth، با Firebase احراز هویت کنید. میتوانید با باز کردن یک پنجره پاپآپ یا با هدایت به صفحه ورود، کاربران خود را به ورود با حسابهای مایکروسافتشان ترغیب کنید. روش هدایت در دستگاههای تلفن همراه ترجیح داده میشود.
- برای ورود به سیستم با یک پنجره پاپآپ، تابع
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. });
- برای ورود به سیستم با هدایت به صفحه ورود، تابع
signInWithRedirectرا فراخوانی کنید:
هنگام استفاده از
signInWithRedirect،linkWithRedirectیاreauthenticateWithRedirect، بهترین شیوهها را دنبال کنید.Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Web
firebase.auth().signInWithRedirect(provider);
پس از اینکه کاربر ورود به سیستم را تکمیل کرد و به صفحه بازگشت، میتوانید با فراخوانی
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. });
پس از اتمام موفقیتآمیز، توکن دسترسی OAuth مرتبط با ارائهدهنده میتواند از شیء
firebase.auth.UserCredentialبرگردانده شده بازیابی شود.با استفاده از توکن دسترسی OAuth، میتوانید Microsoft Graph API را فراخوانی کنید.
برای مثال، برای دریافت اطلاعات اولیه پروفایل، میتوان REST API زیر را فراخوانی کرد:
curl -i -H "Authorization: Bearer ACCESS_TOKEN" https://graph.microsoft.com/v1.0/me
برخلاف سایر ارائهدهندگان پشتیبانیشده توسط Firebase Auth، مایکروسافت آدرس اینترنتی عکس ارائه نمیدهد و در عوض، دادههای دودویی برای عکس پروفایل باید از طریق Microsoft Graph API درخواست شوند.
علاوه بر توکن دسترسی OAuth، توکن شناسه OAuth کاربر نیز میتواند از شیء
firebase.auth.UserCredentialبازیابی شود. ادعایsubدر توکن شناسه مختص برنامه است و با شناسه کاربر فدرال مورد استفاده توسط Firebase Auth که از طریقuser.providerData[0].uidقابل دسترسی است، مطابقت نخواهد داشت. به جای آن باید از فیلدoidclaim استفاده شود. هنگام استفاده از یک مستاجر Azure AD برای ورود به سیستم، ادعایoidدقیقاً مطابقت خواهد داشت. با این حال، برای مورد غیر مستاجر، فیلدoidپر شده است. برای یک شناسه فدرال4b2eabcdefghijkl،oidفرمی به شکل00000000-0000-0000-4b2e-abcdefghijklخواهد داشت.- برای ورود به سیستم با یک پنجره پاپآپ، تابع
در حالی که مثالهای بالا بر جریانهای ورود به سیستم تمرکز دارند، شما همچنین میتوانید با استفاده از
linkWithPopup/linkWithRedirect، یک ارائهدهنده مایکروسافت را به یک کاربر موجود پیوند دهید. به عنوان مثال، میتوانید چندین ارائهدهنده را به یک کاربر پیوند دهید و به آنها اجازه دهید با هر یک از آنها وارد سیستم شوند.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. });
همین الگو را میتوان با
reauthenticateWithPopup/reauthenticateWithRedirectاستفاده کرد که میتواند برای بازیابی اعتبارنامههای جدید برای عملیات حساسی که نیاز به ورود اخیر دارند، استفاده شود.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. });
احراز هویت با Firebase در افزونه Chrome
اگر در حال ساخت یک برنامه افزونه کروم هستید، به راهنمای اسناد Offscreen مراجعه کنید.
مراحل بعدی
پس از اینکه کاربر برای اولین بار وارد سیستم میشود، یک حساب کاربری جدید ایجاد میشود و به اطلاعات احراز هویت - یعنی نام کاربری و رمز عبور، شماره تلفن یا اطلاعات ارائه دهنده مجوز - که کاربر با آن وارد سیستم شده است، پیوند داده میشود. این حساب جدید به عنوان بخشی از پروژه Firebase شما ذخیره میشود و میتواند برای شناسایی کاربر در هر برنامه در پروژه شما، صرف نظر از نحوه ورود کاربر، مورد استفاده قرار گیرد.
در برنامههای شما، روش پیشنهادی برای اطلاع از وضعیت احراز هویت کاربر، تنظیم یک ناظر (observer) روی شیء
Authاست. سپس میتوانید اطلاعات اولیه پروفایل کاربر را از شیءUserدریافت کنید. به بخش مدیریت کاربران (Manage Users) مراجعه کنید.در قوانین امنیتی پایگاه داده و Cloud Storage Firebase Realtime Database ، میتوانید شناسه کاربری منحصر به فرد کاربر وارد شده را از متغیر
authدریافت کنید و از آن برای کنترل دادههایی که کاربر میتواند به آنها دسترسی داشته باشد، استفاده کنید.
برای خروج کاربر، 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. });