Uwierzytelnianie przy użyciu SAML w aplikacjach internetowych

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

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

Zanim zaczniesz

Aby zalogować użytkowników przy użyciu dostawcy tożsamości SAML, musisz najpierw zebrać niektóre informacje od dostawcy:

  • Identyfikator jednostki dostawcy: identyfikator URI dostawcy tożsamości.
  • Adres URL logowania jednokrotnego przez SAML dostawcy: adres URL logowania dostawcy tożsamości. stronę.
  • Certyfikat klucza publicznego dostawcy: certyfikat używany do weryfikacji. tokeny podpisane przez dostawcę tożsamości.
  • Identyfikator jednostki aplikacji: identyfikator URI, który identyfikuje aplikację – „usługę” dostawcy”.

Po otrzymaniu tych informacji włącz SAML jako dostawcę logowania dla Projekt Firebase:

  1. Dodaj Firebase do projektu JavaScript.

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

  3. Na stronie Dostawcy logowania. w konsoli Firebase, kliknij Dodaj nowego dostawcę i wybierz SAML.

  4. Nazwij tego dostawcę. Zanotuj wygenerowany identyfikator dostawcy: np. saml.example-provider. Ten identyfikator będzie potrzebny podczas dodawania kod logowania do aplikacji.

  5. Podaj identyfikator jednostki dostawcy tożsamości, adres URL logowania jednokrotnego i klucz publiczny certyfikat. 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 zezwolenia na liście Uwierzytelnianie > Ustawienia stronie konsoli Firebase.

Zarejestruj się za pomocą pakietu SDK Firebase

Aby zalogować się za pomocą pakietu SDK Firebase JavaScript, postępuj zgodnie z tymi wskazówkami kroki:

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

    Web

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

    Web

    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ć stronie logowania w wyskakującym okienku przeglądarki.

    Proces przekierowania

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

    Web

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

    Web

    firebase.auth().signInWithRedirect(provider);
    

    Gdy użytkownik się zaloguje i wróci do aplikacji, możesz uzyskać wyniku logowania, dzwoniąc pod numer 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.
      });
    

    Wyskakująca instrukcja

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

    Token identyfikatora i element UserInfo zawiera adres e-mail użytkownika tylko wtedy, gdy został podany w Atrybut 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ą procesu logowania, ale możesz użyć tego samego wzorzec łączenia dostawcy SAML z istniejącym użytkownikiem za pomocą linkWithRedirect() i linkWithPopup(), a następnie ponownie uwierzytelnij użytkownika przy użyciu reauthenticateWithRedirect() i reauthenticateWithPopup(), które mogą być służy do pobierania nowych danych logowania na potrzeby operacji poufnych, które wymagają ostatniego logowania.