āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒ⧇ 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 āĻ•āύāϏ⧋āϞ⧇āϰ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āĻĒ⧃āĻˇā§āĻ āĻžāϝāĻŧ, āύāϤ⧁āύ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀ āϝ⧋āĻ— āĻ•āϰ⧁āύ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ SAML āĻ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύāĨ¤

  4. āĻāχ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻāĻ•āϟāĻŋ āύāĻžāĻŽ āĻĻāĻŋāύ. āϝ⧇ āĻĒā§āϰ⧋āĻ­āĻžāχāĻĄāĻžāϰ āφāχāĻĄāĻŋ āϤ⧈āϰāĻŋ āĻšāϝāĻŧ⧇āϛ⧇ āϤāĻž āύ⧋āϟ āĻ•āϰ⧁āύ: saml.example-provider āĻŽāϤ āĻ•āĻŋāϛ⧁āĨ¤ āφāĻĒāύāĻŋ āϝāĻ–āύ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ āϏāĻžāχāύ-āχāύ āϕ⧋āĻĄ āϝ⧋āĻ— āĻ•āϰāĻŦ⧇āύ āϤāĻ–āύ āφāĻĒāύāĻžāϰ āĻāχ āφāχāĻĄāĻŋāϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāĻŦ⧇āĨ¤

  5. āφāĻĒāύāĻžāϰ āĻĒāϰāĻŋāϚāϝāĻŧ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āϏāĻ¤ā§āϤāĻž āφāχāĻĄāĻŋ, SSO URL āĻāĻŦāĻ‚ āϏāĻ°ā§āĻŦāϜāύ⧀āύ āϕ⧀ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧁āύ⧎ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ (āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀) āϏāĻ¤ā§āϤāĻž āφāχāĻĄāĻŋ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰ⧁āύāĨ¤ āĻāχ āĻŽāĻžāύāϗ⧁āϞāĻŋ āĻ…āĻŦāĻļā§āϝāχ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāĻ°ā§āϧāĻžāϰāĻŋāϤ āĻŽāĻžāύāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻšā§āĻŦāĻšā§ āĻŽā§‡āϞ⧇⧎

  6. āφāĻĒāύāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύ.

  7. āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āĻĄā§‹āĻŽā§‡āύ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āύāĻž āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āύ, āϤāĻžāĻšāϞ⧇ 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.
      });
    

    ID āĻŸā§‹āϕ⧇āύ āĻāĻŦāĻ‚ UserInfo āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āχāĻŽā§‡āϞ āĻ āĻŋāĻ•āĻžāύāĻž āĻĨāĻžāϕ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āϝāĻĻāĻŋ āĻāϟāĻŋ āĻĒāϰāĻŋāϚāϝāĻŧ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ SAML āĻĻāĻžāĻŦāĻŋāϰ NameID āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ⧇ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧ:

    <Subject>
      <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID>
    </Subject>
    
  2. āϝāĻĻāĻŋāĻ“ āωāĻĒāϰ⧇āϰ āωāĻĻāĻžāĻšāϰāĻŖāϗ⧁āϞāĻŋ āϏāĻžāχāύ-āχāύ āĻĒā§āϰāĻŦāĻžāĻšā§‡āϰ āωāĻĒāϰ āĻĢā§‹āĻ•āĻžāϏ āĻ•āϰ⧇, āφāĻĒāύāĻŋ linkWithRedirect() āĻāĻŦāĻ‚ linkWithPopup() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ SAML āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϕ⧇ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰ āϏāĻžāĻĨ⧇ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰāϤ⧇ āĻāĻ•āχ āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ reauthenticateWithRedirect() āĻāĻŦāĻ‚ reauthenticateWithPopup() āĻĻāĻŋāϝāĻŧ⧇ āĻāĻ•āϜāύ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϕ⧇ āĻĒ⧁āύāϰāĻžāϝāĻŧ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϝāĻž āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻ• āϞāĻ—āχāύ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻāĻŽāύ āϏāĻ‚āĻŦ⧇āĻĻāύāĻļā§€āϞ āĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϞāĻžāĻĒ⧇āϰ āϜāĻ¨ā§āϝ āύāϤ⧁āύ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤