Получение профиля пользователя в базовом API ASP.net с помощью неявного потока Identity Server 4

Я создал базовый API ASP.net, защищенный с помощью Identity Server 4, который обслуживает клиент реагирования, который получает токен идентификатора и токен доступа через неявный поток. Я могу успешно аутентифицировать запросы от клиента к API.

Моя проблема в том, что мне нужно получить доступ к профилю запрашивающего пользователя (или, по крайней мере, к его идентификатору пользователя) в API. В настоящее время у меня есть доступ только к утверждениям пользователя, включенным в токен-носитель. Есть ли способ настроить мой API так, чтобы он получал профиль пользователя из Authority с помощью какого-то промежуточного программного обеспечения? Нужно ли мне передавать токен идентификатора с запросом?

Спасибо за ваше время.


person Noah    schedule 27.11.2017    source источник


Ответы (2)


Вы должны найти «Sub» в утверждениях о принципах безопасности. Это userId. Затем вы можете запросить информацию о пользователе в своем пользовательском магазине.

Теоретически ваш JWT должен включать утверждения (информацию о пользователе), которые часто хотел использовать ваш ресурс, чтобы таким образом вы минимизировали количество обращений к базе данных. Не рекомендуется включать конфиденциальную информацию в заявления JWT.

Также вы можете запросить информацию о пользователе

  "userinfo_endpoint": "https://rmedev1.dca.com.au:8000/identity/server/connect/userinfo",

Если вы используете промежуточное ПО IdentityServer4.AccessTokenValidation, вы должны иметь возможность использовать службу самоанализа для запроса информации о пользователе.

http://docs.identityserver.io/en/release/endpoints/userinfo.html

    var userInfoClient = new UserInfoClient(doc.UserInfoEndpoint, token);

    var response = await userInfoClient.GetAsync();
    var claims = response.Claims;
person Jay    schedule 29.11.2017

В конце концов, решение оказалось довольно простым. Я реализовал IdentityServer4.ServicesIProfileService на своем сервере идентификации, что позволило мне добавлять любые и все необходимые утверждения к токену доступа.

Затем в моем запуске для сервера идентификации я регистрирую свою службу профилей как службу профилей.

services.AddScoped<IProfileService, MyProfileService>();
person Noah    schedule 30.11.2017