Uwierzytelnianie przy użyciu SAML w aplikacjach internetowych

Po przejściu na Uwierzytelnianie Firebase z Identity Platform możesz uwierzytelniać użytkowników w Firebase przy użyciu wybranego dostawcy tożsamości SAML. Dzięki temu możesz używać rozwiązania do logowania jednokrotnego opartego na SAML do logowania użytkowników w aplikacji Firebase.

Uwierzytelnianie Firebase obsługuje tylko przepływ SAML inicjowany przez dostawcę usługi.

Zanim zaczniesz

Aby logować użytkowników przy użyciu dostawcy tożsamości SAML, musisz najpierw uzyskać od niego pewne informacje:

  • Identyfikator jednostki dostawcy: identyfikator URI dostawcy tożsamości.
  • Adres URL logowania jednokrotnego przez SAML dostawcy: adres URL strony logowania dostawcy tożsamości.
  • Certyfikat klucza publicznego dostawcy: certyfikat używany do weryfikowania tokenów podpisanych przez dostawcę tożsamości.
  • Identyfikator jednostki aplikacji: identyfikator URI, który identyfikuje aplikację („dostawcę usług”).

Gdy otrzymasz te informacje, włącz SAML jako dostawcę logowania w projekcie Firebase:

  1. Dodaj Firebase do projektu JavaScript.

  2. Jeśli nie korzystasz jeszcze z Uwierzytelniania Firebase z Identity Platform, zrób to. Uwierzytelnianie SAML jest dostępne tylko w uaktualnionych projektach.

  3. Na stronie Sign-in Providers (Dostawcy logowania) w konsoli Firebase kliknij Dodaj nowego dostawcę, a następnie wybierz SAML.

  4. Nazwij tego dostawcę. Zanotuj wygenerowany identyfikator dostawcy, np. saml.example-provider. Będzie Ci potrzebny podczas dodawania kodu logowania do aplikacji.

  5. Podaj identyfikator jednostki dostawcy tożsamości, adres URL logowania jednokrotnego i certyfikat klucza publicznego. Podaj też identyfikator jednostki aplikacji (dostawcy usług). Te wartości muszą dokładnie odpowiadać wartościom przypisanym przez dostawcę.

  6. Zapisz zmiany.

  7. Jeśli domena aplikacji nie została jeszcze autoryzowana, dodaj ją do listy dozwolonych na stronie Uwierzytelnianie > Ustawienia w konsoli Firebase.

Zarejestruj się za pomocą pakietu SDK Firebase

Aby zalogować się za pomocą pakietu SDK Firebase JavaScript, wykonaj te czynności:

  1. Utwórz instancję SAMLAuthProvider, używając identyfikatora dostawcy uzyskanego w konsoli Firebase.

    Web Modular API

    import { SAMLAuthProvider } from "firebase/auth";
    
    const provider = new SAMLAuthProvider('saml.example-provider');
    

    Interfejs API internetowej przestrzeni nazw

    var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider');
    ``
    
  1. Uwierzytelniaj w Firebase za pomocą obiektu dostawcy SAML.

    Możesz przekierować użytkownika na stronę logowania dostawcy lub otworzyć stronę logowania w wyskakującym okienku przeglądarki.

    Proces przekierowania

    Przekieruj na stronę logowania dostawcy, dzwoniąc pod numer signInWithRedirect():

    Web Modular API

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

    Interfejs API internetowej przestrzeni nazw

    firebase.auth().signInWithRedirect(provider);
    

    Gdy użytkownik się zaloguje i wróci do aplikacji, możesz uzyskać wynik logowania, dzwoniąc pod numer getRedirectResult().

    Web Modular API

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

    Interfejs API internetowej przestrzeni nazw

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

    Wyskakująca instrukcja

    Web Modular API

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

    Interfejs API internetowej przestrzeni nazw

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

    Token identyfikatora i obiekt UserInfo zawierają adres e-mail użytkownika tylko wtedy, gdy został podany w atrybucie NameID potwierdzenia SAML od dostawcy tożsamości:

    <Subject>
      <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID>
    </Subject>
    
  2. Powyższe przykłady dotyczą procesów logowania, ale za pomocą tego samego wzorca możesz połączyć dostawcę SAML z dotychczasowym użytkownikiem za pomocą narzędzi linkWithRedirect() i linkWithPopup() oraz ponownie uwierzytelnić użytkownika za pomocą narzędzi reauthenticateWithRedirect() i reauthenticateWithPopup(), które mogą służyć do pobierania nowych danych logowania w przypadku działań związanych z poufnymi danymi, które wymagają niedawnego logowania.