Аутентификация с использованием SAML в веб-приложениях

Если вы перешли на аутентификацию Firebase с платформой идентификации, вы можете аутентифицировать своих пользователей в Firebase, используя поставщика удостоверений SAML по вашему выбору. Это позволяет использовать решение единого входа на основе SAML для входа пользователей в ваше приложение Firebase.

Аутентификация Firebase поддерживает только поток SAML, инициированный поставщиком услуг.

Прежде чем вы начнете

Чтобы выполнить вход пользователей с помощью поставщика удостоверений SAML, необходимо сначала получить от поставщика некоторую информацию:

  • Идентификатор объекта поставщика : URI, идентифицирующий поставщика удостоверений.
  • URL-адрес системы единого входа SAML поставщика . URL-адрес страницы входа поставщика удостоверений.
  • Сертификат открытого ключа поставщика : сертификат, используемый для проверки токенов, подписанных поставщиком удостоверений.
  • Идентификатор объекта вашего приложения : URI, который идентифицирует ваше приложение, «поставщика услуг».

Получив вышеуказанную информацию, включите SAML в качестве поставщика входа в систему для вашего проекта Firebase:

  1. Добавьте Firebase в свой проект JavaScript .

  2. Если вы еще не обновили аутентификацию Firebase с помощью Identity Platform, сделайте это. Аутентификация SAML доступна только в обновленных проектах.

  3. На странице «Поставщики входа» в консоли Firebase нажмите «Добавить нового поставщика» , а затем нажмите «SAML» .

  4. Дайте имя этому провайдеру. Обратите внимание на сгенерированный идентификатор поставщика: что-то вроде saml.example-provider . Этот идентификатор понадобится вам, когда вы добавите код входа в свое приложение.

  5. Укажите идентификатор объекта вашего поставщика удостоверений, URL-адрес единого входа и сертификат открытого ключа. Также укажите идентификатор объекта вашего приложения (поставщика услуг). Эти значения должны точно соответствовать значениям, назначенным вам вашим провайдером.

  6. Сохраните изменения.

  7. Если вы еще не авторизовали домен своего приложения, добавьте его в список разрешений на странице «Аутентификация» > «Настройки» консоли Firebase.

Управляйте процессом входа с помощью Firebase SDK

Чтобы обработать процесс входа с помощью Firebase JavaScript SDK, выполните следующие действия:

  1. Создайте экземпляр 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');
    ``
    
  1. Аутентификация в 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.
      });
    

    Токен идентификатора и объект UserInfo содержат адрес электронной почты пользователя, только если он указан в атрибуте NameID утверждения SAML от поставщика удостоверений:

    <Subject>
      <NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">test@email.com</NameID>
    </Subject>
    
  2. Хотя приведенные выше примеры сосредоточены на потоках входа в систему, вы можете использовать тот же шаблон, чтобы связать поставщика SAML с существующим пользователем с помощью linkWithRedirect() и linkWithPopup() , а также повторно аутентифицировать пользователя с помощью reauthenticateWithRedirect() и reauthenticateWithPopup() . который можно использовать для получения новых учетных данных для конфиденциальных операций, требующих недавнего входа в систему.