Если вы обновили Firebase Authentication with Identity Platform , вы можете аутентифицировать пользователей в Firebase, используя выбранного вами поставщика идентификации SAML. Это позволяет использовать ваше решение SSO на основе 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-адрес SSO и сертификат открытого ключа. Также укажите идентификатор сущности вашего приложения (поставщика услуг). Эти значения должны точно совпадать со значениями, присвоенными вам вашим поставщиком.
Сохраните изменения.
Если вы еще не авторизовали домен своего приложения, добавьте его в список разрешенных доменов на странице «Аутентификация > Настройки» в консоли Firebase .
Обрабатывайте процесс авторизации с помощью Firebase SDK.
Для обработки процесса авторизации с помощью Firebase JavaScript SDK выполните следующие действия:
Создайте экземпляр
SAMLAuthProvider, используя идентификатор поставщика, полученный в консоли Firebase.Web
import { SAMLAuthProvider } from "firebase/auth"; const provider = new SAMLAuthProvider('saml.example-provider');Web
var provider = new firebase.auth.SAMLAuthProvider('saml.example-provider'); ``
Аутентификация в Firebase осуществляется с использованием объекта поставщика SAML.
Вы можете либо перенаправить пользователя на страницу входа в систему провайдера, либо открыть страницу входа во всплывающем окне браузера.
Перенаправление потока
Перенаправьте пользователя на страницу входа в систему, вызвав
signInWithRedirect():Web
import { getAuth, signInWithRedirect } from "firebase/auth"; const auth = getAuth(); signInWithRedirect(auth, provider);Web
firebase.auth().signInWithRedirect(provider);После того, как пользователь завершит вход в систему и вернется в ваше приложение, вы можете получить результат входа, вызвав
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. });Всплывающий поток
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. });Идентификационный токен и объект UserInfo содержат адрес электронной почты пользователя только в том случае, если он указан в атрибуте
NameIDутверждения SAML от поставщика идентификации:<Subject> <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID> </Subject>Хотя приведенные выше примеры сосредоточены на процессах входа в систему, вы можете использовать тот же шаблон для связи поставщика SAML с существующим пользователем с помощью
linkWithRedirect()иlinkWithPopup(), а также для повторной аутентификации пользователя с помощьюreauthenticateWithRedirect()иreauthenticateWithPopup(), которые можно использовать для получения новых учетных данных для конфиденциальных операций, требующих недавнего входа в систему.