احراز هویت با استفاده از SAML در برنامه های وب

اگر به Firebase Authentication with Identity Platform ارتقا داده‌اید، می‌توانید کاربران خود را با Firebase و با استفاده از ارائه‌دهنده هویت SAML مورد نظر خود احراز هویت کنید. این امر امکان استفاده از راهکار SSO مبتنی بر SAML شما را برای ورود کاربران به برنامه Firebase فراهم می‌کند.

Firebase Authentication فقط از جریان SAML آغاز شده توسط ارائه دهنده خدمات پشتیبانی می‌کند.

قبل از اینکه شروع کنی

برای ورود کاربران با استفاده از ارائه‌دهنده هویت SAML، ابتدا باید اطلاعاتی را از ارائه‌دهنده جمع‌آوری کنید:

  • شناسه موجودیت ارائه‌دهنده : یک URI که ارائه‌دهنده هویت را مشخص می‌کند.
  • آدرس اینترنتی SAML SSO ارائه‌دهنده : آدرس اینترنتی صفحه ورود به سیستم ارائه‌دهنده هویت.
  • گواهی کلید عمومی ارائه‌دهنده : گواهی مورد استفاده برای اعتبارسنجی توکن‌های امضا شده توسط ارائه‌دهنده هویت.
  • شناسه موجودیت برنامه شما : یک URI که برنامه شما، "ارائه دهنده خدمات" را شناسایی می‌کند.

پس از اینکه اطلاعات فوق را در اختیار داشتید، SAML را به عنوان ارائه دهنده ورود به سیستم برای پروژه Firebase خود فعال کنید:

  1. فایربیس را به پروژه جاوا اسکریپت خود اضافه کنید .

  2. اگر به Firebase Authentication with Identity Platform ارتقا نداده‌اید، این کار را انجام دهید. احراز هویت SAML فقط در پروژه‌های ارتقا یافته در دسترس است.

  3. در صفحه ارائه دهندگان ورود به سیستم کنسول Firebase ، روی افزودن ارائه دهنده جدید کلیک کنید و سپس روی SAML کلیک کنید.

  4. به این ارائه‌دهنده یک نام بدهید. به شناسه ارائه‌دهنده‌ای که ایجاد می‌شود توجه کنید: چیزی شبیه saml.example-provider . هنگام افزودن کد ورود به برنامه خود به این شناسه نیاز خواهید داشت.

  5. شناسه موجودیت، آدرس SSO و گواهی کلید عمومی ارائه‌دهنده هویت خود را مشخص کنید. همچنین شناسه موجودیت برنامه خود (ارائه‌دهنده خدمات) را مشخص کنید. این مقادیر باید دقیقاً با مقادیری که ارائه‌دهنده به شما اختصاص داده است، مطابقت داشته باشند.

  6. تغییرات خود را ذخیره کنید.

  7. اگر هنوز دامنه برنامه خود را مجاز نکرده‌اید، آن را به لیست مجاز در صفحه Authentication > Settings کنسول Firebase اضافه کنید.

مدیریت جریان ورود به سیستم با Firebase SDK

برای مدیریت جریان ورود به سیستم با استفاده از Firebase JavaScript SDK، مراحل زیر را دنبال کنید:

  1. با استفاده از شناسه ارائه‌دهنده‌ای که در کنسول 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');
    ``
    
  1. با استفاده از شیء ارائه دهنده 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>
    
  2. اگرچه مثال‌های بالا بر جریان‌های ورود به سیستم تمرکز دارند، می‌توانید از همین الگو برای پیوند دادن یک ارائه‌دهنده SAML به یک کاربر موجود با استفاده از linkWithRedirect() و linkWithPopup() استفاده کنید و یک کاربر را با reauthenticateWithRedirect() و reauthenticateWithPopup() مجدداً احراز هویت کنید، که می‌تواند برای بازیابی اعتبارنامه‌های جدید برای عملیات حساسی که نیاز به ورود اخیر دارند، استفاده شود.