Работа с сессионными утверждениями#

Извлечение маркера идентификации#

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);