Вызов приложения выдачи согласия#
В Blitz Identity Provider предусмотрена возможность интеграции с внешними приложениями для отображения кастомизированного экрана согласия. Это позволяет гибко настраивать процесс получения согласий от пользователей, а также расширять функциональность стандартного механизма.
Основные возможности:
Кастомизация интерфейса
- добавление графических элементов, изменение текста и дизайна экрана согласия.Гибкая логика
- возможность изменять логику выдачи согласий в зависимости от требований приложения или пользователя.Дополнительные операции
- выполнение дополнительных действий, таких как изменение атрибутов пользователя или запрос дополнительных данных.
Принцип работы:
Вместо стандартного экрана согласия Blitz Identity Provider перенаправляет пользователя во внешнее приложение.
Пользователь взаимодействует с внешним приложением, где выдает необходимые согласия (
scope
) и, при необходимости, предоставляет дополнительные данные (claim
).После завершения взаимодействия пользователь возвращается в Blitz Identity Provider.
Blitz Identity Provider получает от внешнего приложения информацию о выданных согласиях, сохраняет их и завершает процесс аутентификации.
Примечание
Переключение на использование стороннего приложения выдачи экрана согласия выполняется в настройках конфигурационного файла.
Вызов внешнего приложения#
При необходимости вызвать внешнее приложение Blitz Identity Provider будет делать POST-запрос на URL данного приложения. Приложение должно быть запущено на том же домене, что и Blitz Identity Provider.
POST https://login.company.com/consent HTTP/1.1
Content-Type: application/json
Authorization: Basic dG…dk
{
"id": "a9692091-4613-41aa-91d2-9a71a3fc2e07",
"claims": {"sub":"iivanov","family_name":"Иванов"},
"requiredScopes": ["openid","profile"]
"optionalScopes": ["blitz_api_user"]
"rpId": "test_app",
"sessionId": "4502aa51-f28c-4a64-951c-5ab1e77b1294"
}
Запрос содержит заголовок с Basic-авторизацией. Описание параметров:
id
– идентификатор запроса в формате GUID;sessionId
– идентификатор созданной сессии в формате GUID;rpId
– идентификатор приложения, инициировавшего запрос в Blitz Identity Provider;requiredScopes
– перечень согласий (scope
), которые обязательно требуются приложением (rpId);optionalScopes
– перечень согласий (scope
), которые запрашиваются приложением (rpId), но не обязательны;claims
– утверждения Blitz Identity Provider, характеризующие пользователя;request
– данные о запросе.
Ответ от внешнего приложения с редиректом#
Внешнее приложение должно поставить cookie
безопасности с идентификатором сессии на общий с Blitz Identity Provider домен. Также в ответе оно должно указать location
для перенаправления в свой интерфейс. Название cookie
безопасности должно быть Cac
.
HTTP/1.1 302 Found
Location:https://login.company.com/consent/begin?id=a9692091-4613-41aa-91d2-9a71a3fc2e07
Set-Cookie:Cac=YTk2OTIwOTEtNDYxMy00MWFhLTkxZDItOWE3MWEzZmMyZTA3; Domain=mos.ru; Secure; HttpOnly
Ответ от внешнего приложения без редиректа#
Если внешнее приложение, получив запрос от Blitz Identity Provider, принимает решение сразу вернуть ответ с перечнем разрешенных согласий (без необходимости отображать веб-интерфейс), то оно может сразу вернуть ответ со статусом HTTP 200
и json
со следующими параметрами:
id
– идентификатор запроса, берется из исходного запроса;grantedScopes
– перечень согласий (scope
), на которые дал согласие пользователь;status
– статус выдачи согласий, в случае успеха принимает значение “granted”.
{
"grantedScopes":[
"openid",
"profile"
],
"status":"granted",
"id":"3e7b-396ae977-4509-a689-bc641e3311b6"
}
Возврат в Blitz Identity Provider из внешнего приложения#
После того, как внешнее приложение сделало все операции, оно должно вернуть пользователя в Blitz Identity Provider и передать перечень выданных пользователей согласий (scope
). Для этого оно должно выполнить запрос методом POST
на URL
Blitz Identity Provider.
POST https://login.company.com/sps/oauth/consent/save HTTP/1.1
Content-Type: application/json
{
"id": "a9692091-4613-41aa-91d2-9a71a3fc2e07",
"extSessionId": "YTk2OTIwOTEtNDYxMy00MWFhLTkxZDItOWE3MWEzZmMyZTA3",
"grantedScopes": ["openid","profile"],
"status": "granted",
"additionalClaims": {"bio_constent":"true"},
"sessionId": "4502aa51-f28c-4a64-951c-5ab1e77b1294",
}
Параметры запроса:
id
иsessionId
– значения из исходного запроса;extSessionId
– значение cookie безопасности;grantedScopes
– перечень согласий (scope
), на которые дал согласие пользовательdismissedScopes
– перечень согласий (scope
), на которые пользователь не дал согласие;additionalClaims
– утверждения (claim
) о пользователе, которыми нужно обогатить сессию;status
– статус выдачи согласий. Возможны варианты:granted
– согласия (scope
) выданы;dismissed
– хотя бы одно обязательное согласие (scope
) не выдано;error
– ошибка при выдаче согласий.
POST https://login.company.com/sps/oauth/consent/save HTTP/1.1
Content-Type: application/json
{
"id": "a9692091-4613-41aa-91d2-9a71a3fc2e07",
"extSessionId": "YTk2OTIwOTEtNDYxMy00MWFhLTkxZDItOWE3MWEzZmMyZTA3",
"dismissedScopes": ["profile","blitz_api_user"],
"status": "dismissed",
"sessionId": "4502aa51-f28c-4a64-951c-5ab1e77b1294",
}
POST https://login.company.com/sps/oauth/consent/save HTTP/1.1
Content-Type: application/json
{
"id": "a9692091-4613-41aa-91d2-9a71a3fc2e07",
"extSessionId": "YTk2OTIwOTEtNDYxMy00MWFhLTkxZDItOWE3MWEzZmMyZTA3",
"status": "error",
"error_code":"user_not_found",
"еrror_message":"User not found",
"sessionId": "4502aa51-f28c-4a64-951c-5ab1e77b1294",
}
В случае успешного сохранения результатов обработки согласий Blitz Identity Provider вернет ответ со статусом HTTP 204 OK
. В этом случае внешнее приложение должно выполнить редирект браузера пользователя в Blitz Identity Provider по определенному адресу.
https://login.company.com/sps/oauth/consent/callback
Для настройки параметров экрана согласия в конфигурационном файле обратитесь к разделу Экран согласий.