Если вы перешли на Firebase Authentication with Identity Platform, вы можете аутентифицировать своих пользователей с помощью Firebase, используя поставщика удостоверений SAML по вашему выбору. Это позволяет использовать решение единого входа на основе SAML для входа пользователей в ваше приложение Firebase.
Firebase Authentication поддерживает только поток SAML, инициированный поставщиком услуг.
Прежде чем вы начнете
Чтобы войти в систему с помощью поставщика удостоверений SAML, необходимо сначала получить от поставщика некоторую информацию:
- Идентификатор объекта поставщика : URI, который идентифицирует поставщика удостоверений.
- URL-адрес SAML SSO поставщика : URL-адрес страницы входа поставщика удостоверений.
- Сертификат открытого ключа поставщика : сертификат, используемый для проверки токенов, подписанных поставщиком удостоверений.
- Идентификатор объекта вашего приложения : URI, который идентифицирует ваше приложение, «поставщика услуг».
Получив приведенную выше информацию, включите SAML в качестве поставщика входа для вашего проекта Firebase:
Если вы еще не перешли на Firebase Authentication with Identity Platform, сделайте это. Аутентификация SAML доступна только в обновленных проектах.
На странице «Поставщики входа» в консоли Firebase нажмите «Добавить нового поставщика» , а затем нажмите «SAML» .
Дайте имя этому провайдеру. Обратите внимание на сгенерированный идентификатор провайдера: что-то вроде
saml.example-provider
. Этот идентификатор понадобится вам при добавлении кода входа в приложение.Укажите идентификатор объекта поставщика удостоверений, URL-адрес единого входа и сертификат открытого ключа. Также укажите идентификатор сущности вашего приложения (поставщика услуг). Эти значения должны точно совпадать со значениями, назначенными вам вашим провайдером.
Сохраните изменения.
Если вы еще не авторизовали домен своего приложения, добавьте его в список разрешенных на странице Аутентификация > Настройки консоли Firebase.
Обработка процесса входа с помощью Firebase SDK
Чтобы обработать процесс входа с помощью Firebase JavaScript SDK, выполните следующие действия:
Создайте экземпляр
SAMLAuthProvider
, используя идентификатор провайдера, который вы получили в консоли Firebase.Модульный веб-API
import { SAMLAuthProvider } from "firebase/auth"; const provider = new SAMLAuthProvider('saml.example-provider');
Веб-API с пространством имен
var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider'); ``
Выполните аутентификацию в Firebase, используя объект поставщика SAML.
Вы можете либо перенаправить пользователя на страницу входа провайдера, либо открыть страницу входа во всплывающем окне браузера.
Перенаправить поток
Перенаправить на страницу входа провайдера, вызвав
signInWithRedirect()
:Модульный веб-API
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);
Веб-API с пространством имен
firebase.auth().signInWithRedirect(provider);
После того, как пользователь завершит вход и вернется в ваше приложение, вы можете получить результат входа, вызвав
getRedirectResult()
.Модульный веб-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. });
Веб-API с пространством имен
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. });
Всплывающий поток
Модульный веб-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. });
Веб-API с пространством имен
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. });
Хотя приведенные выше примеры сосредоточены на потоках входа, вы можете использовать тот же шаблон, чтобы связать поставщика SAML с существующим пользователем с помощью
linkWithRedirect()
иlinkWithPopup()
, а также повторно аутентифицировать пользователя с помощьюreauthenticateWithRedirect()
иreauthenticateWithPopup()
. который можно использовать для получения новых учетных данных для конфиденциальных операций, требующих недавнего входа в систему.