Uwierzytelniaj przy użyciu protokołu SAML w aplikacjach internetowych

Jeśli dokonałeś aktualizacji do uwierzytelniania Firebase z platformą tożsamości, możesz uwierzytelniać swoich użytkowników w Firebase przy użyciu wybranego dostawcy tożsamości SAML. Dzięki temu możesz używać rozwiązania SSO opartego na protokole SAML do logowania użytkowników w aplikacji Firebase.

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

Zanim zaczniesz

Aby zalogować użytkowników za pomocą dostawcy tożsamości SAML, musisz najpierw zebrać od dostawcy pewne informacje:

  • Identyfikator jednostki dostawcy : URI identyfikujący dostawcę tożsamości.
  • Adres URL logowania jednokrotnego SAML dostawcy : adres URL strony logowania dostawcy tożsamości.
  • Certyfikat klucza publicznego dostawcy : certyfikat używany do sprawdzania poprawności tokenów podpisanych przez dostawcę tożsamości.
  • Identyfikator jednostki Twojej aplikacji : identyfikator URI identyfikujący Twoją aplikację, czyli „dostawcę usług”.

Po uzyskaniu powyższych informacji włącz SAML jako dostawcę logowania w swoim projekcie Firebase:

  1. Dodaj Firebase do swojego projektu JavaScript .

  2. Jeśli nie dokonałeś aktualizacji do uwierzytelniania Firebase z platformą tożsamości, zrób to. Uwierzytelnianie SAML jest dostępne tylko w zaktualizowanych projektach.

  3. Na stronie Dostawcy logowania w konsoli Firebase kliknij Dodaj nowego dostawcę , a następnie kliknij SAML .

  4. Podaj nazwę tego dostawcy. Zanotuj wygenerowany identyfikator dostawcy: coś w rodzaju saml.example-provider . Będziesz potrzebować tego identyfikatora, gdy dodasz kod logowania do swojej aplikacji.

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

  6. Zapisz zmiany.

  7. Jeśli nie autoryzowałeś jeszcze domeny swojej aplikacji, dodaj ją do listy dozwolonych na stronie Uwierzytelnianie > Ustawienia w konsoli Firebase.

Obsługuj proces logowania za pomocą pakietu SDK Firebase

Aby obsłużyć proces logowania za pomocą pakietu SDK JavaScript Firebase, wykonaj następujące kroki:

  1. Utwórz instancję SAMLAuthProvider , korzystając z identyfikatora dostawcy otrzymanego w konsoli Firebase.

    Modułowe API sieciowe

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

    Internetowy interfejs API z przestrzenią nazw

    var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider');
    ``
    
  1. Uwierzytelnij się w Firebase przy użyciu obiektu dostawcy SAML.

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

    Przekieruj przepływ

    Przekieruj do strony logowania dostawcy, wywołując metodę signInWithRedirect() :

    Modułowe API sieciowe

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

    Internetowy interfejs API z przestrzenią nazw

    firebase.auth().signInWithRedirect(provider);
    

    Gdy użytkownik zakończy logowanie i wróci do aplikacji, możesz uzyskać wynik logowania, wywołując funkcję getRedirectResult() .

    Modułowe API sieciowe

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

    Internetowy interfejs API z 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.
      });
    

    Przepływ wyskakujących okienek

    Modułowe API sieciowe

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

    Internetowy interfejs API z 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 ID i obiekt UserInfo zawierają adres e-mail użytkownika tylko wtedy, gdy jest on podany w atrybucie NameID asercji 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. Chociaż powyższe przykłady skupiają się na przepływach logowania, możesz użyć tego samego wzorca, aby połączyć dostawcę SAML z istniejącym użytkownikiem za pomocą linkWithRedirect() i linkWithPopup() oraz ponownie uwierzytelnić użytkownika za pomocą reauthenticateWithRedirect() i reauthenticateWithPopup() , które można wykorzystać do pobrania nowych danych uwierzytelniających dla wrażliwych operacji wymagających niedawnego logowania.