Настройка и применение механизмов авторизации для OpenID Connect-приложений через механизм claims based authorization - Avanpost FAM/MFA+

Настройка и применение механизмов авторизации для OpenID Connect-приложений через механизм claims based authorization

Общие сведения

В статье описываются механизмы авторизации для OpenID Connect-приложений через claims based authorization. Это вид авторизации, при котором права пользователя или приложения на выполнение действия определяются через "claims" (утверждения), присвоенные этому пользователю или приложению. В случае OpenID Connect, это могут быть стандартные или пользовательские "claims", которые передаются клиенту в ID токене или доступны через UserInfo Endpoint.

Для приложения, подключенного по OpenID Connect, с целью 2FA/MFA/SSO могут использоваться следующие факторы аутентификации: 

Можно обеспечить использование как двухфакторной аутентификации, так и многофакторной аутентификации в зависимости от группы пользователя.

Система поддерживает функциональность SSO (Signle Sign-On), обеспечиваемую протоколом OpenID Connect: если пользователь прошёл аутентификацию в веб-приложение в соответствии с настроенным сценарием, то система не будет запрашивать повторного подтверждения аутентификации при аутентификации в другое веб-приложение. Также обеспечивается реализация функциональности SLO (Single Logout)/Backchannel Logout в рамках протокола OpenID Connect.

Для предоставления доступа пользователю, его необходимо включить в группу, которая имеет доступ к созданному приложению. Доступна реализация автоматического включения и исключения пользователя из группы в рамках синхронизации с LDAP-каталогом.

Для отзыва доступа у пользователя необходимо исключить его из группы, которая имеет доступ к созданному приложению.

При описании claim используется стандарт JWT. JSON Web Token (JWT) — это компактный формат представления claim, предназначенный для работы через Web, например, по протоколу HTTP. Утверждения (claims) описываются URI, т.е., символьной строкой, позволяющей идентифицировать какой-либо ресурс: документ, изображение, файл, службу, ящик электронной почты. Система по умолчанию поддерживает следующие claims из таблицы ниже.

ClaimsСодержание
"aud"Содержит конфиденциальные строки, каждая из которых содержит значение StringOrURI. Интерпретация значений аудитории обычно зависит от приложения.
"email"Электронный адрес пользователя.
"email_verified"Признак подтверждения указанного электронного адреса пользователя.
"exp"Время истечения срока действия (после которого запросы не должны поступать в обработку).
"family_name"Имя пользователя (логин).
"given_name"URI для утверждения, указывающего заданное имя сущности.
"iat"  Время издания запроса, содержит значение в формате NumericDate.
"iss"Идентификатор принципала, выдавшего JWT. 
"locale"URI для утверждения, указывающего языковой стандарт по месту нахождения сущности.
"name"URI для утверждения, указывающего имя сущности.
"sub"Описывает предмет JWT, строка с учетом регистра, содержащая StringOrURI. Значение субъекта должно быть ограничено областью действия, быть уникальным локально в контексте эмитента или в глобальном масштабе.

Чтобы добавить свои утверждения, необходимо зайти в административный интерфейс, выбрать приложение OpenId, для которого необходимо добавить утверждение, и внести их на вкладке Scopes (Рисунок). Имя при этом может быть произвольным, но рекомендуется придерживаться стандарта JWT и не допускать дублирования стандартных имен утверждений.

Для проверки работы утверждений после их добавления можно воспользоваться любым сервисом проверки JWT, например, jwt.io.

2FA/MFA и SSO/SLO для веб-приложений

Avanpost FAM может быть использован для реализации SSO/SLO/2FA/MFA-сценариев для веб-приложений при их подключении по OpenID Connect.

Интеграция веб-приложений с Avanpost FAM выполняется посредством стандартных механизмов OpenID Connect. 

Для подключения веб-приложений рекомендуется использование Authorization Code Flow with PKCE.

2FA/MFA и SSO/SLO для десктопных приложений

Avanpost FAM может быть использован для реализации SSO/SLO/2FA/MFA-сценариев для десктопных приложений при их подключении по OpenID Connect. Для унаследованных десктопных приложений без возможности реализации OAuth/OpenID Connect и других IdP-механизмов следует рассмотреть механизм Enterprise SSO

Ниже описаны возможные варианты реализации интеграции десктопного приложения с системой Avanpost FAM.

Выбор сценария аутентификации (OAuth 2.0 Flow)

Для Native-приложений допустимо использование следующих сценариев (OAuth 2.0 Flow):

  • Authorization Code Flow;
  • Authorization Code Flow with PKCE.

Authorization Code Flow следует использовать при наличии у целевого приложения backend на сервере закрытого канала связи до token_endpoint Системы.

Authorization Code Flow with PKCE следует использовать при отсутствии у целевого приложения backend закрытого канала связи до token_endpoint Системы.

Если приложение считает, что требуется выполнить аутентификацию пользователя средствами Системы, то:

  1. Приложение формирует запрос к authorization_endpoint в соответствии с выбранной схемой (Authorization Code Flow либо Authorization Code Flow with PKCE) и открывает сформированный запрос в WebView внутри приложения.
  2. Система в ответ на этот запрос отображает веб-интерфейс аутентификации. Пользователь выполняет аутентификацию в Системе, используя веб-интерфейс Системы.
  3. После прохождения аутентификации Система выполняет перенаправление пользователя на адрес, содержащий заполненный HTTP Query String параметр code. Приложение считывает значение параметра code.
  4. Приложение формирует запрос, используя полученный code, к token_endpoint Системы и получает в ответ набор токенов (Access Token, ID Token, Refresh Token). Пользователь аутентифицирован.

Приложение А. Endpoint'ы OpenID Connect

Доступные в Avanpost FAM в OpenID Connect Identity Provider методы:

EndpointURI PathНазначение
Discovery Endpoint


https://${baseUrl}/.well-known/oauth-authorization-serverDiscovery-запрос метаинформации о параметрах сервера авторизации в соответствии со спецификацией OAuth 2.0

https://${baseUrl}/.well-known/openid-configuration

Discovery-запрос метаинформации о параметрах сервера аутентификации в соответствии со спецификацией OpenID Connect
Public Key Endpointhttps://${baseUrl}/oauth2/public_keysПолучение перечня открытых ключей в формате JSON Web Key Set, с использованием которых должна выполняться проверка подписи токенов
Authorization Endpointhttps://${baseUrl}/oauth2/authorizeВыполнение аутентификации и авторизации с применением одного из доступных OAuth-сценариев (OAuth 2.0 Flow)
Token Endpointhttps://${baseUrl}/oauth2/tokenВыпуск и перевыпуск токенов после выполнения аутентификации и авторизации
Token Introspection Endpointhttps://${baseUrl}/oauth2/token/introspectЗапрос сведений об актуальности токенов
Token Revocation Endpointhttps://${baseUrl}/oauth2/token/revokeЗапрос на отзыв токенов, инициируемый приложением
Userinfo Endpointhttps://${baseUrl}/oauth2/userinfoПолучение расширенной информации о пользователе
End Session Endpointhttps://${baseUrl}/oauth2/end_sessionЗавершение сессии, инициируемое приложением 

Приложение Б. Структура OpenID Connect-токенов

Токены, используемые приложениями в рамках взаимодействий по OAuth и OpenID Connect, имеют различное предназначение и обладают некоторыми особенностями. Сравнение используемых токенов в Avanpost FAM приведено в таблице:

Критерий

Access Token

ID Token

Refresh Token

НазначениеАутентификация, авторизация и предоставление полномочий пользователяАутентификация, идентификация, и предоставление сведений о пользователеПеревыпуск токенов
СтруктураJWT с дополнительными атрибутами либо случайная строка (в зависимости от значения параметра «Access token type» конкретного приложения)JWT с дополнительными атрибутамиСлучайная строка
Срок жизни токенаЗависит от значения параметра «Access token lifetime (in seconds)» конкретного приложения (client_id); по умолчанию 3600 с.Зависит от значения параметра «I» конкретного приложения (client_id); по умолчанию 3600 с.Зависит от значения параметра «Refresh token lifetime (in seconds)» конкретного приложения (client_id); по умолчанию 7200 с.
Получение стандартных OAuth/OpenID Connect ClaimsДа, только REQUIRED в соответствии с RFCДаНет
Получение дополнительных ClaimsДа, в случае использования в приложении формата JWTДаНет
Получение прав доступа пользователяДаДаНет
Валидация токенаДа, подписьДа, подписьНет


Обсуждение