#identityserver4 #access-token #claims-based-identity
#identityserver4 #токен доступа #идентификатор на основе утверждений
Вопрос:
У меня есть мобильный клиент (Android), API (WebAPI .net Core 3.1) и IdentityServer4.
Я захожу с моим клиентом на IdentityServer и получаю обратно токен идентификации и токен доступа.
Я использую токен access для доступа к API … пока все хорошо.
Теперь в API, только в первый раз, мне нужно обновить таблицу с именем и фамилией пользователя плюс некоторые другие идентификационные данные, но эти утверждения недоступны в API (поскольку эта информация недоступна в токене доступа)
Мой вопрос в том, как мне получить утверждения пользователя из моего кода API?
Я мог бы передавать различные утверждения в виде строковых параметров в вызов API, но мобильный клиент не может увидеть, произошло ли это обновление, поэтому мне пришлось бы передавать эту информацию каждый раз, когда я вызываю API, что очень расточительно, поскольку требуется только в первый раз. Я также предпочитаю, чтобы это было сделано без раскрытия этого в конечной точке моего API.
Кто-нибудь может подсказать, как я могу получить утверждения пользователя (профиля) с помощью API?
Обновление: теперь я нашел конечную точку в IdentityServer, которая могла бы помочь, называется «userinfo_endpoint», но для этого нужен токен доступа. Могу ли я каким-либо образом повторно использовать токен доступа, который используется для доступа к API в моем коде API?
Ответ №1:
Да, вы можете использовать тот же токен доступа для связи с конечной точкой user info, чтобы получить дополнительную информацию о пользователе.
Если бы вы использовали JavaScript для доступа к нему, это могло бы выглядеть следующим образом:
//Make a AJAX-call to the user endpoint
$.ajax({
url: "@OpenIDSettings.userinfo_endpoint",
type: 'GET',
headers: { "Authorization": 'Bearer ' params.access_token }
}).done(function (data) {
$("#userinfo").text(JSON.stringify(data, null, 2));
});
Вы просто устанавливаете заголовок авторизации.
Вы также можете добавить пользовательские утверждения к токену доступа, указав UserClaims в своих ApiScopes или определениях ApiResource, например:
new ApiScope()
{
Name = "shop.admin",
DisplayName = "You can administrate the e-shop systems",
Description = "Full admin access to the e-shop system.",
Emphasize = false,
Enabled = true,
Required = false,
UserClaims = new List<string>
{
//Custom user claims that should be provided when requesting access to this API.
//These claims will be added to the access token, not the ID-token!
"seniority",
}
}
Комментарии:
1. Большое вам за это спасибо! Я добавлю утверждения в ApiScope, как вы предложили 🙂