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:
Jeśli nie korzystasz jeszcze z Uwierzytelniania Firebase z Identity Platform, zrób to. Uwierzytelnianie SAML jest dostępne tylko w uaktualnionych projektach.
Na stronie Sign-in Providers (Dostawcy logowania) w konsoli Firebase kliknij Dodaj nowego dostawcę, a następnie wybierz SAML.
Nazwij tego dostawcę. Zanotuj wygenerowany identyfikator dostawcy, np.
saml.example-provider
. Będzie Ci potrzebny podczas dodawania kodu logowania do aplikacji.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ę.
Zapisz zmiany.
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:
Utwórz instancję
SAMLAuthProvider
, używając identyfikatora dostawcy uzyskanego 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'); ``
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
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ć wynik 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 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>
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()
ilinkWithPopup()
oraz ponownie uwierzytelnić użytkownika za pomocą narzędzireauthenticateWithRedirect()
ireauthenticateWithPopup()
, 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.