Show/Hide Toolbars

Руководство администратора

term_icon SSO (Single Sign-On) технология единого входа, благодаря которой пользователи могут авторизоваться в нескольких приложениях с помощью одного набора учетных данных.

term_icon Security Assertion Markup Language (SAML) — открытый стандарт передачи идентификационных данных между облачными системами. Как правило, его используют в больших организациях, где есть актуальная база пользователей, работают политики безопасности и т. п., что делает доступ к контенту в сервисе более безопасным и контролируемым.

term_icon ADFS (Active Directory Federation Services) — компонент Windows Server, обеспечивающий функционал провайдера аутентификации для веб-приложений. ADFS расширяет возможности использования технологии единого входа, доступной в пределах одной границы безопасности или организации, в веб-приложениях. Службы ADFS тесно интегрированы с Active Directory. ADFS извлекает атрибуты пользователей из Active Directory, а также проверяет подлинность пользователей в этой системе.

Настройка SP

term_icon Identity Provider (IDP) поставщик удостоверений, приложение, реализующее SAML-протокол, аутентифицирующее пользователей

term_icon Service Provider (SP) провайдер услуг,  приложение, предоставляющее сервис аутентифированному у Identity Provider пользователю (в нашем случае — приложение "Первая Форма")

1. Сгенерировать сертификат для подписания запросов SP —> IDP

Сертификат представляет собой запароленный .pfx-файл, содержащий публичный и приватный ключи.

При выполнении запросов SP —> IDP этот файл читается приложением Первой формы, и запрос подписывается этими ключами. Файл следует поместить на сервере 1F.

Публичный ключ этого сертификата (отдельный .cer-файл, сгенерированный вместе с .pfx-файлом) нужно предоставить администратору IDP, и установить его на IDP-сервере как корневой сертификат (необходимо для валидации подписи запроса).

2. Установить сертификат для валидации запросов IDP —> SP

Сертификат (публичный ключ) можно получить у админа IDP, и установить его на 1F-сервере как корневой.

Настройка "Первой Формы"

1. Добавить сервис SAML в Провайдеры аутентификации.

2. Создать провайдер аутентификации на базе этого сервиса. Описание параметров настроек сервиса SAML вы найдете в соответствующем разделе.

3. После создания провайдера аутентификации в приложении 1F по адресу /api/auth/saml/{providerId}/metadata станут доступны метаданные-SP.

term_icon Метаданные XML-файл с описанием и основными параметры конфигурации. Метаданные есть и у SP и у IDP.

Этот файл следует передать администратору IDP.

В нем указаны:

AssertionConsumerService — эндпоинт для приема ответов аутентификации от IDP (/api/auth/saml/{providerId}/assertionconsumer)

SingleLogoutService — эндпоинт для приема ответов разлогина от IDP (/api/auth/saml/{providerId}/singlelogout)

saml_setting1

Метаданные

Настройка IDP

Выполняется администратором IDP. Важные шаги:

1. Получить от SP файл с метаданными-SP (/api/auth/saml/{providerId}/metadata), и создать конфигурацию

2. На сервере IDP установить сертификат (публичный ключ) из п1 "Настройка SP" как корневой.

3. Настроить отдачу необходимых claims в ответе аутентификации (в нашем случае для ADFS — primarySid)

Пример настройки для ADFS

4. Предоставить ссылку на файл метаданных-IDP администратору SP.

В метаданных IDP описаны параметры — эндпоинты для приема запросов логина/логаута, протокол общения, публичные ключи сертификатов.

SingleSignOnService — эндпоинт для приема запросов аутентификации от SP

SingleLogoutService — эндпоинт для приема запросов разлогина от SP

Как работает SAML в приложении 1F

warning_icon  Вся коммуникация между SP и IDP происходит через браузер — SAML основан на HTTP-запросах и браузерных переадресациях

Логин

В файле app-settings.json указан настроенный SAML-провайдер со свойством:

 {

    "Settings": {

      "LoginPath": "/api/auth/saml/{providerId}/login",

      "LogoutPath": "/api/auth/saml/{providerId}/logout"

    },

"ProviderType": "SAML",

    "Name": "1forma.net (ADFS)",

    "Id": {providerId}

  }

SPA приложение отрисует кнопку логина через этот провайдер.

При клике на кнопку SPA переходит по ссылке LoginPath (/api/auth/saml/{providerId}/login),

1F формирует запрос аутентификации и подписывает сертификатом, указанным в конфигурации (SignCertificatePath)

Запрос отправляется в браузер, и происходит переадресация на SingleSignOnService URL (указано в метаданных IDP)

Пользователь аутентифицируется, и IDP формирует ответ аутентификации, и перенаправляет пользователя на AssertionConsumerService (указан в метаданных SP)

1F в методе /api/auth/saml/{providerId}/assertionconsumer валидирует подпись ответа, считывает claim с именем UserClaimName

1F ищет пользователя с SID=claim.Value

1F генерирует стандартный JWT-токен, и зашивает в него 3 дополнительных claims:

oProviderId — id провайдера аутентификации

oNameId — необходим для разлогина

oSessionIndex — необходим для разлогина на сервере IDP

Время жизни токена определяется параметром SecurityTokenValidTo из ответа IDP.

Выход

При разлогине SPA приложение считывает из токена ProviderId, и из app-settings.json LogoutPath для этого провайдера

SPA переходит по ссылке LogoutPath

1F формирует запрос разлогина, и переадресовывает на SingleLogoutService URL (указано в метаданных IDP)

IDP удаляет сессию пользователя, и переадресовывает обратно на SingleLogoutService (указано в метаданных SP)

1F удаляет cookie и токен

Пользователь разлогинен в 1F

Полезные ссылки