ওয়েব অ্যাপে SAML ব্যবহার করে প্রমাণীকরণ করা

আপনি Firebase Authentication with Identity Platform-এ আপগ্রেড করে থাকলে, আপনার পছন্দমতো SAML পরিচয় প্রদানকারী ব্যবহার করে Firebase-এর মাধ্যমে আপনার ব্যবহারকারীদের প্রমাণীকরণ করতে পারবেন। এর ফলে, আপনার Firebase অ্যাপে ব্যবহারকারীদের সাইন-ইন করানোর জন্য আপনার SAML-ভিত্তিক SSO সমাধান ব্যবহার করা সম্ভব হয়।

Firebase Authentication শুধুমাত্র পরিষেবা প্রদানকারীর দ্বারা শুরু করা SAML ফ্লো কাজ করে।

শুরু করার আগে

SAML পরিচয় প্রদানকারী ব্যবহার করে ব্যবহারকারীদের সাইন-ইন করাতে, আপনাকে প্রথমে প্রদানকারীর থেকে কিছু তথ্য সংগ্রহ করতে হবে:

  • প্রদানকারীর এন্টিটি আইডি: একটি URI যা পরিচয় প্রদানকারীকে শনাক্ত করে।
  • প্রোভাইডারের SAML SSO URL: আইডেন্টিটি প্রোভাইডারের সাইন-ইন পৃষ্ঠার URL.
  • প্রোভাইডারের পাবলিক কী সার্টিফিকেট: পরিচয় প্রদানকারীর সাইন করা টোকেন যাচাই করতে ব্যবহৃত সার্টিফিকেট।
  • আপনার অ্যাপের এন্টিটি আইডি: একটি URI যা আপনার অ্যাপ, "পরিষেবা প্রদানকারী"কে শনাক্ত করে।

উপরের তথ্যগুলি পাওয়ার পরে, আপনার Firebase প্রজেক্টের জন্য সাইন-ইন প্রদানকারী হিসেবে SAML চালু করুন:

  1. আপনার JavaScript প্রোজেক্টে Firebase যোগ করুন।

  2. আপনি আগেই এটি করে না থাকলে, আপনার প্রোজেক্ট Firebase Authentication with Identity Platform-এ আপগ্রেড করা হয়েছে কিনা তা নিশ্চিত করুন। SAML অথেন্টিকেশন শুধুমাত্র আপগ্রেড করা প্রোজেক্টে উপলভ্য।

  3. Firebase কনসোলে, নিরাপত্তা > যাচাইকরণ বিকল্পে যান।

  4. সাইন-ইন পদ্ধতি ট্যাবে, নতুন পরিষেবা প্রদানকারী যোগ করুন বিকল্পে ক্লিক করুন এবং তারপরে SAML বিকল্পে ক্লিক করুন।

  5. এই পরিষেবা প্রদানকারীর একটি নাম দিন। জেনারেট করা প্রদানকারী আইডিটি মনে রাখুন: saml.example-provider-এর মতো কিছু। আপনার অ্যাপে সাইন-ইন কোড যোগ করার সময় এই আইডি প্রয়োজন হবে।

  6. আপনার আইডেন্টিটি প্রোভাইডারের এন্টিটি আইডি, SSO URL এবং পাবলিক কী সার্টিফিকেট উল্লেখ করুন। এছাড়াও, আপনার অ্যাপের (পরিষেবা প্রদানকারী) এন্টিটি আইডি উল্লেখ করুন। এইসব ভ্যালু আপনার পরিষেবা প্রদানকারীর অ্যাসাইন করা ভ্যালুর সাথে হুবহু মিলতে হবে।

  7. আপনার করা পরিবর্তন সেভ করুন।

  8. আপনি আগে থেকে করে না থাকলে, আপনার অ্যাপের ডোমেন অনুমোদন করুন:

    1. Firebase কনসোলে, নিরাপত্তা > অনুমোদন > সেটিংস ট্যাব বিকল্পে যান।

    2. অনুমোদিত ডোমেন বিভাগে, ডোমেন যোগ করুন বিকল্পে ক্লিক করুন এবং আপনার ডোমেন যোগ করুন।

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.
      });
    

    পরিচয় প্রদানকারীর SAML অ্যাসারশনের NameID অ্যাট্রিবিউটে ব্যবহারকারীর ইমেল আইডি দেওয়া থাকলে তবেই আইডি টোকেন ও UserInfo অবজেক্টে ব্যবহারকারীর ইমেল আইডি থাকে:

    <Subject>
      <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID>
    </Subject>
    
  2. উপরের উদাহরণগুলি সাইন-ইন ফ্লোয়ের উপর ফোকাস করলেও, আপনি একই প্যাটার্ন ব্যবহার করে linkWithRedirect() ও linkWithPopup() ব্যবহার করে কোনও বিদ্যমান ব্যবহারকারীর সাথে SAML প্রদানকারীকে লিঙ্ক করতে এবং reauthenticateWithRedirect() ও reauthenticateWithPopup() ব্যবহার করে কোনও ব্যবহারকারীকে আবার যাচাই করতে পারেন, যা সংবেদনশীল অপারেশনের জন্য নতুন ক্রেডেনশিয়াল পেতে ব্যবহার করা যেতে পারে যার জন্য সাম্প্রতিক লগ-ইন প্রয়োজন।