Работа с сессионными утверждениями#
Извлечение маркера идентификации#
Blitz Identity Provider позволяет извлекать в процедуре связывания данные из маркера идентификации id_token внешнего поставщика и передавать их в контекст регистрации и входа.
Совет
В случае регистрации данные далее можно:
сохранять в атрибуты пользователя,
анализировать и преобразовывать в процедуре регистрации.
Совет
В случае входа данные можно:
передавать в виде утверждений в маркеры доступа и идентификации,
анализировать и преобразовывать в процедуре входа.
Для получения маркера идентификации в процедуре связывания используйте метод ctx.idTokenClaims().
logger.debug("### Bind TCS-Blitz, idTokenClaims = {}, pid = {}", ctx.idTokenClaims(), ctx.id());
Результат вывода содержимого маркера в лог:
2026-07-05 13:30:31,130 - [DEBUG] - [com.identityblitz.idp.federation.matching.dynamic] -[Tcs_1Tcs.java:211] - ### Bind TCS-Blitz, idTokenClaims = {"at_hash":"c31DDVOE1DG5uanoDFzfCw","aud":["adapter","company-info","opensme","rbac","tid_mosru"],"sub":"d7297108-439c-4249-914c-554ec1db2524","auth_id":"zWpwnt00wG4LLFVgNLf5","azp":"tid_mosru","auth_time":1754389830,"iss":"https://id.tbank.ru/","exp":1754391630,"iat":1754389830}, pid = b9bd4b5e-860c-443b-8864-7504f69760b6
JSON-представление маркера идентификации при необходимости парсится в процедуре связывания, нужные данные отправляются в контекст регистрации или входа.
Передача утверждений в контекст регистрации#
Пример передачи утверждений в контекст регистрации, из которого они могут быть проанализированы и сохранены в атрибуты пользователя:
package com.identityblitz.idp.federation.matching.dynamic;
import com.identityblitz.idp.extensions.types.JsObject;
...
public class IDP extends MatchingBlock {
...
private JsObject toRegData(MatchingContext ctx) {
JsObject reg = JsObject.empty;
JsObject idp_token = ctx.idTokenClaims();
JsObject ext_idp = idp_token.asObject("idp");
logger.trace("Bind ESA-IngoID, idTokenClaims = {} from external id = {}", idp_token, ctx.id());
if (ext_idp != null) {
String idp_id = ext_idp.asString("id");
logger.debug("Bind ESA-IngoID, idp_id = {}", idp_id);
reg = reg.addString("idp_id", idp_id);
...
}
logger.trace("Binding, reg data = {}", reg);
return reg;
}
@Override public MatchResult match(MatchingContext ctx, List<MatchingUser> users) {
return register(ctx, toRegData(ctx));
}
Передача утверждений в контекст входа#
Предупреждение
Передача утверждений работает только в связке с опцией Не сохранять привязку аккаунта внешнего поставщика к учетной записи.
Внимание
Для того чтобы передать утверждение в access_token/id_token, оно должно быть прописано в разделе sessionClaims файла конфигурации /usr/share/identityblitz/blitz-config/blitz.conf.
Предупреждение
На данный момент нет возможности передать сессионное утверждение на вход после регистрации, восстановления доступа и при открытии веб-ресурса из мобильного приложения.
Для передачи утверждений в контекст входа используйте методы matched и refine.
Пример:
JsObject idp_token = ctx.idTokenClaims();
JsObject ext_idp = idp_token.asObject("ext_idp");
logger.trace("Bind ESA-IngoID, idTokenClaims = {} from external id = {}", idp_token, ctx.id());
logger.debug("Bind ESA-IngoID, ext_idp = {}", ext_idp);
JsObject extra_claim = JsObject.empty;
if (ext_idp != null) {
String idp_id = ext_idp.asString("id");
logger.debug("Bind ESA-IngoID, idp_id = {}", idp_id);
extra_claim = extra_claim
.addObject("ext_idp", ext_idp)
.addString("idp_id", idp_id);
}
return matched(ctx, users.get(0), extra_claim);