اصالت‌سنجی بااستفاده از SAML در برنامه‌های وب

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

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

قبل از شروع

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

  • شناسه نهاد ارائه‌دهنده: یک نشانی وب که ارائه‌دهنده هویت را شناسایی می‌کند.
  • نشانی وب SAML SSO ارائه‌دهنده: نشانی وب صفحه ورود به سیستم ارائه‌دهنده هویت.
  • گواهینامه کلید عمومی ارائه‌دهنده: گواهینامه‌ای که برای تأیید کردن نشان‌های امضاشده توسط ارائه‌دهنده هویت استفاده می‌شود.
  • شناسه نهاد برنامه شما: یک نشانی وب که برنامه شما، «ارائه‌دهنده سرویس»، را شناسایی می‌کند.

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

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

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

  3. در کنسول Firebase، به امنیت > اصالت‌سنجی بروید.

  4. در برگه روش ورود به سیستم، روی افزودن ارائه‌دهنده جدید کلیک کنید، و سپس روی SAML کلیک کنید.

  5. نامی برای این ارائه‌دهنده انتخاب کنید. شناسه ارائه‌دهنده تولیدشده را یادداشت کنید: چیزی شبیه saml.example-provider. وقتی کد ورود به سیستم را به برنامه‌تان اضافه می‌کنید به این شناسه نیاز خواهید داشت.

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

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

  8. اگر قبلاً این کار را نکرده‌اید، دامنه برنامه‌تان را مجاز کنید:

    1. در کنسول Firebase، به امنیت > اصالت‌سنجی > زبانه تنظیمات بروید.

    2. در بخش دامنه‌های مجاز، روی افزودن دامنه کلیک کنید و دامنه خود را اضافه کنید.

مدیریت جریان ورود به سیستم با «کیت توسعه نرم‌افزار Firebase»

برای مدیریت جریان ورود به سیستم با «کیت توسعه نرم‌افزار جاوا اسکریپت Firebase»، این مراحل را دنبال کنید:

  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() استفاده کنید. از این الگو می‌توان برای بازیابی اطلاعات اعتباری جدید برای عملیات حساس که نیاز به ورود به سیستم اخیر دارند استفاده کرد.