Как поместить данные профиля приложения в токен доступа?

Я использую IdentityServer4 со смесью клиентов v4 / v3.

У меня есть данные пользовательского профиля, которые хранятся на стороне приложения, которые я хотел бы включить в access_token, чтобы мои последующие API-интерфейсы могли использовать их с аутентификацией bearer / jwt.

Я понимаю, что могу управлять утверждениями через IProfileService, но это регистрируется на стороне удостоверения, а не в приложении.

Как я могу получить утверждения моего настраиваемого профиля в запрошенный токен доступа?

Дополнительная информация

Я проверил концепцию, используя Extension Grants, чтобы специально передать мое приложение заявляет через IdS, чтобы оно включало те, что указаны в токене. Это работает ... но кажется довольно хакерским.


person Jeremy Smith    schedule 18.07.2018    source источник


Ответы (3)


Пожалуйста, не делай этого. Токен JWT отправляется с каждым запросом.

если нижележащему API требуется что-то от пользователя, либо отправьте это с вызовом, либо получите конечную точку, которую может вызвать нижележащий API. Встраивание редко используемой большой информации в некоторые передаваемые вызовы (кроме http 2.0) является неонононо.

person TomTom    schedule 20.07.2018
comment
Под «заявками на настраиваемый профиль» я не подразумеваю такие вещи, как любимый цвет, имя питомца и т. Д., Это значения, используемые для авторизации в последующих сервисах, например идентификаторы компаний. Я определенно не планирую раздувать токен. - person Jeremy Smith; 22.07.2018

Вы не можете изменить содержимое токена jwt после того, как он был создан и подписан сервером авторизации. Но вы можете использовать ClaimsTransformation для управления утверждениями в проекте api.

Изменить: еще один вариант использования JwtBearer OnTokenValidated события.

person adem caglin    schedule 19.07.2018
comment
Это потребует, чтобы все мои подчиненные API имели доступ к моему хранилищу профилей, да? - person Jeremy Smith; 20.07.2018

Любые утверждения, выданные вашей реализацией IProfileService, должны попадать в токен. Обратите внимание, что ваша реализация IProfileService должна проверять, выдает ли она утверждения, связанные с IdentityResources или ApiResources. Было бы бессмысленно добавлять утверждения api в id_token.

Когда клиент получает токен от вашей IDS, он передает его в вызовах вашему API. Если ваш клиент использует аутентификацию cookie, сами токены, а также некоторые утверждения профиля пользователя будут храниться в cookie аутентификации. Это, очевидно, зависит от потока, который вы используете неявно, гибридно и т. Д.

Если вы хотите проверить, что вы получаете от IDS на клиенте, вы можете добавить обработчик событий аутентификации cookie (например, OnValidatePrincipal), чтобы увидеть, что хранится в cookie, или добавить обработчик событий OnUserInformationReceived в свой обработчик OIDC и проверить, что вы получаете назад там.

person Simon    schedule 20.07.2018
comment
Вы предлагаете, чтобы моя служба профилей обратилась к API профилей пользователей моего приложения, чтобы получить любые недостающие данные во время аутентификации? Я подумал об этом, но не хотел объединять свои службы, поскольку в наш домен добавляется больше приложений. - person Jeremy Smith; 22.07.2018