Web uygulamalarında SAML Kullanarak Kimlik Doğrulama

Firebase Authentication with Identity Platform sürümüne yükselttiyseniz istediğiniz SAML kimlik sağlayıcıyı kullanarak Firebase ile kullanıcılarınızın kimliğini doğrulayabilirsiniz. Bu sayede, kullanıcıların Firebase uygulamanızda oturum açması için SAML tabanlı TOA çözümünüzü kullanabilirsiniz.

Firebase Authentication yalnızca servis sağlayıcı tarafından başlatılan SAML akışını destekler.

Başlamadan önce

Kullanıcıların oturumunu SAML kimlik sağlayıcı kullanarak açmak için öncelikle sağlayıcıdan bazı bilgiler toplamanız gerekir:

  • Sağlayıcının varlık kimliği: Kimlik sağlayıcıyı tanımlayan bir URI.
  • Sağlayıcının SAML TOA URL'si: Kimlik sağlayıcının oturum açma sayfasının URL'si.
  • Sağlayıcının ortak anahtar sertifikası: Kimlik sağlayıcı tarafından imzalanan jetonları doğrulamak için kullanılan sertifika.
  • Uygulamanızın varlık kimliği: Uygulamanızı (hizmet sağlayıcı) tanımlayan bir URI.

Yukarıdaki bilgilere sahip olduktan sonra Firebase projeniz için SAML'yi oturum açma sağlayıcısı olarak etkinleştirin:

  1. Firebase'i JavaScript projenize ekleyin.

  2. Henüz Firebase Authentication with Identity Platform sürümüne yükseltmediyseniz yükseltin. SAML kimlik doğrulaması yalnızca yükseltilmiş projelerde kullanılabilir.

  3. Firebase konsolunun Oturum açma sağlayıcıları sayfasında Yeni sağlayıcı ekle'yi ve ardından SAML'yi tıklayın.

  4. Bu sağlayıcıya bir ad verin. Oluşturulan sağlayıcı kimliğini not edin: saml.example-provider gibi. Uygulamanıza oturum açma kodu eklerken bu kimliğe ihtiyacınız olur.

  5. Kimlik sağlayıcınızın varlık kimliğini, TOA URL'sini ve ortak anahtar sertifikasını belirtin. Ayrıca uygulamanızın (hizmet sağlayıcı) varlık kimliğini de belirtin. Bu değerler, sağlayıcınızın size atadığı değerlerle tam olarak eşleşmelidir.

  6. Yaptığınız değişiklikleri kaydedin.

  7. Uygulamanızın alanını henüz yetkilendirmediyseniz Firebase konsolunun Kimlik Doğrulama > Ayarlar sayfasındaki izin verilenler listesine ekleyin.

Firebase SDK ile oturum açma akışını yönetme

Firebase JavaScript SDK ile oturum açma akışını işlemek için aşağıdaki adımları uygulayın:

  1. Firebase konsolunda aldığınız sağlayıcı kimliğini kullanarak bir SAMLAuthProvider örneği oluşturun.

    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 sağlayıcı nesnesini kullanarak Firebase ile kimlik doğrulama.

    Kullanıcıyı sağlayıcının oturum açma sayfasına yönlendirebilir veya oturum açma sayfasını pop-up tarayıcı penceresinde açabilirsiniz.

    Yönlendirme akışı

    signInWithRedirect() numarasını arayarak sağlayıcının oturum açma sayfasına yönlendirin:

    Web

    import { getAuth, signInWithRedirect } from "firebase/auth";
    
    const auth = getAuth();
    signInWithRedirect(auth, provider);
    

    Web

    firebase.auth().signInWithRedirect(provider);
    

    Kullanıcı oturum açma işlemini tamamlayıp uygulamanıza döndükten sonra getRedirectResult() işlevini çağırarak oturum açma sonucunu alabilirsiniz.

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

    Pop-up akışı

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

    Kimlik jetonu ve UserInfo nesnesi, kullanıcının e-posta adresini yalnızca kimlik sağlayıcının SAML onayındaki NameID özelliğinde sağlanıyorsa içerir:

    <Subject>
      <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID>
    </Subject>
    
  2. Yukarıdaki örnekler oturum açma akışlarına odaklanmış olsa da linkWithRedirect() ve linkWithPopup() kullanarak bir SAML sağlayıcıyı mevcut bir kullanıcıya bağlamak ve reauthenticateWithRedirect() ile reauthenticateWithPopup() kullanarak kullanıcıyı yeniden kimlik doğrulamak için aynı kalıbı kullanabilirsiniz. Bu kalıp, son oturum açma işlemi gerektiren hassas işlemler için yeni kimlik bilgilerini almak üzere kullanılabilir.