اگر به Firebase Authentication with Identity Platform ارتقا دادهاید، میتوانید کاربران خود را با Firebase و با استفاده از ارائهدهنده هویت SAML مورد نظر خود احراز هویت کنید. این امر امکان استفاده از راهکار SSO مبتنی بر SAML شما را برای ورود کاربران به برنامه Firebase فراهم میکند.
Firebase Authentication فقط از جریان SAML آغاز شده توسط ارائه دهنده خدمات پشتیبانی میکند.
قبل از اینکه شروع کنی
برای ورود کاربران با استفاده از ارائهدهنده هویت SAML، ابتدا باید اطلاعاتی را از ارائهدهنده جمعآوری کنید:
- شناسه موجودیت ارائهدهنده : یک URI که ارائهدهنده هویت را مشخص میکند.
- آدرس اینترنتی SAML SSO ارائهدهنده : آدرس اینترنتی صفحه ورود به سیستم ارائهدهنده هویت.
- گواهی کلید عمومی ارائهدهنده : گواهی مورد استفاده برای اعتبارسنجی توکنهای امضا شده توسط ارائهدهنده هویت.
- شناسه موجودیت برنامه شما : یک URI که برنامه شما، "ارائه دهنده خدمات" را شناسایی میکند.
پس از اینکه اطلاعات فوق را در اختیار داشتید، SAML را به عنوان ارائه دهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:
اگر به Firebase Authentication with Identity Platform ارتقا ندادهاید، این کار را انجام دهید. احراز هویت SAML فقط در پروژههای ارتقا یافته در دسترس است.
در صفحه ارائه دهندگان ورود به سیستم کنسول Firebase ، روی افزودن ارائه دهنده جدید کلیک کنید و سپس روی SAML کلیک کنید.
به این ارائهدهنده یک نام بدهید. به شناسه ارائهدهندهای که ایجاد میشود توجه کنید: چیزی شبیه
saml.example-provider. هنگام افزودن کد ورود به برنامه خود به این شناسه نیاز خواهید داشت.شناسه موجودیت، آدرس SSO و گواهی کلید عمومی ارائهدهنده هویت خود را مشخص کنید. همچنین شناسه موجودیت برنامه خود (ارائهدهنده خدمات) را مشخص کنید. این مقادیر باید دقیقاً با مقادیری که ارائهدهنده به شما اختصاص داده است، مطابقت داشته باشند.
تغییرات خود را ذخیره کنید.
اگر هنوز دامنه برنامه خود را مجاز نکردهاید، آن را به لیست مجاز در صفحه Authentication > Settings کنسول Firebase اضافه کنید.
مدیریت جریان ورود به سیستم با Firebase SDK
برای مدیریت جریان ورود به سیستم با استفاده از Firebase JavaScript SDK، مراحل زیر را دنبال کنید:
با استفاده از شناسه ارائهدهندهای که در کنسول Firebase دریافت کردهاید، یک نمونه از
SAMLAuthProviderایجاد کنید.Web
import { SAMLAuthProvider } from "firebase/auth"; const provider = new SAMLAuthProvider('saml.example-provider');Web
var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider'); ``
با استفاده از شیء ارائه دهنده SAML، با Firebase احراز هویت کنید.
شما میتوانید کاربر را به صفحه ورود به سیستم ارائه دهنده هدایت کنید یا صفحه ورود را در یک پنجره مرورگر بازشو باز کنید.
جریان تغییر مسیر
با فراخوانی تابع
signInWithRedirect()به صفحه ورود به سیستم ارائه دهنده هدایت شوید:Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);Web
firebase.auth().signInWithRedirect(provider);پس از اینکه کاربر ورود به سیستم را تکمیل کرد و به برنامه شما بازگشت، میتوانید نتیجه ورود به سیستم را با فراخوانی
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. });جریان پاپآپ
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. });توکن شناسه و شیء UserInfo فقط در صورتی حاوی آدرس ایمیل کاربر هستند که در ویژگی
NameIDادعای SAML از ارائه دهنده هویت ارائه شده باشد:<Subject> <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID> </Subject>اگرچه مثالهای بالا بر جریانهای ورود به سیستم تمرکز دارند، میتوانید از همین الگو برای پیوند دادن یک ارائهدهنده SAML به یک کاربر موجود با استفاده از
linkWithRedirect()وlinkWithPopup()استفاده کنید و یک کاربر را باreauthenticateWithRedirect()وreauthenticateWithPopup()مجدداً احراز هویت کنید، که میتواند برای بازیابی اعتبارنامههای جدید برای عملیات حساسی که نیاز به ورود اخیر دارند، استفاده شود.