Если вы перешли на Firebase Authentication with Identity Platform , вы можете аутентифицировать своих пользователей в Firebase, используя выбранного вами поставщика удостоверений SAML. Это позволяет использовать решение единого входа на основе SAML для входа пользователей в ваше приложение Firebase.
Firebase Authentication поддерживает только поток SAML, инициированный поставщиком услуг.
Прежде чем начать
Чтобы выполнить вход пользователей с помощью поставщика удостоверений SAML, необходимо сначала получить от поставщика некоторую информацию:
- Идентификатор объекта поставщика : URI, идентифицирующий поставщика удостоверений.
- URL-адрес системы единого входа SAML поставщика . URL-адрес страницы входа поставщика удостоверений.
- Сертификат открытого ключа поставщика : сертификат, используемый для проверки токенов, подписанных поставщиком удостоверений.
- Идентификатор объекта вашего приложения : URI, который идентифицирует ваше приложение, «поставщика услуг».
Получив вышеуказанную информацию, включите SAML в качестве поставщика входа в свой проект Firebase:
Если вы еще не перешли на Firebase Authentication with Identity Platform , сделайте это. Аутентификация SAML доступна только в обновленных проектах.
На странице «Поставщики входа» в консоли Firebase нажмите « Добавить нового поставщика» , а затем нажмите «SAML» .
Дайте имя этому провайдеру. Обратите внимание на сгенерированный идентификатор поставщика: что-то вроде
saml.example-provider
. Этот идентификатор понадобится вам, когда вы добавите код входа в свое приложение.Укажите идентификатор объекта вашего поставщика удостоверений, URL-адрес единого входа и сертификат открытого ключа. Также укажите идентификатор объекта вашего приложения (поставщика услуг). Эти значения должны точно соответствовать значениям, назначенным вам вашим провайдером.
Сохраните изменения.
Если вы еще не авторизовали домен своего приложения, добавьте его в список разрешений на странице «Аутентификация» > «Настройки» консоли 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()
. который можно использовать для получения новых учетных данных для конфиденциальных операций, требующих недавнего входа в систему.