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 SAML kimlik sağlayıcı kullanarak oturum açmasını sağlamak 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 yapmadıysanız projenizin Firebase Authentication with Identity Platform sürümüne yükseltildiğinden emin olun. SAML kimlik doğrulaması yalnızca yükseltilmiş projelerde kullanılabilir.

  3. Firebase konsolunda Güvenlik > Kimlik doğrulama'ya gidin.

  4. Oturum açma yöntemi sekmesinde Yeni sağlayıcı ekle'yi ve ardından SAML'yi tıklayın.

  5. 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.

  6. 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 (servis sağlayıcı) tüzel kişi kimliğini de belirtin. Bu değerler, sağlayıcınızın size atadığı değerlerle tam olarak eşleşmelidir.

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

  8. Henüz yapmadıysanız uygulamanızın alanını yetkilendirin:

    1. Firebase konsolunda Güvenlik > Kimlik doğrulama > Ayarlar sekmesine gidin.

    2. Yetkili alanlar bölümünde Alan ekle'yi tıklayın ve alanınızı ekleyin.

Oturum açma akışını Firebase SDK ile işleme

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

  1. SAMLAuthProvider konsolunda aldığınız sağlayıcı kimliğini kullanarak bir Firebase ö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.