Как заполнить пользовательское утверждение ресурса идентификации для клиента гибридного потока?
У меня есть сервер IdentityServer4 с пользовательским ресурсом идентификации:
new IdentityResource
{
Name = "custom.profile",
UserClaims = new[] { "location" }
}
Этот ресурс используется пользователями ASP.NET клиент MVC, соединяющийся с гибридным потоком OIDC и без страницы согласия:
new Client
{
ClientId = "client.mvc",
ClientName = "MVC Core Client",
AllowedGrantTypes = GrantTypes.Hybrid,
...
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"custom.profile"
},
Вход осуществляется вручную в <idsrv>/Login/DoLogin
:
public async Task<IActionResult> DoLogin(LoginInputModel model)
{
if (ModelState.IsValid)
{
if (model.Username == "test.user" && model.Password == "password")
{
Guid userId = new Guid("8da49efb-a1aa-4253-bb7f-56cc6c532b78");
await HttpContext.Authentication.SignInAsync(userId.ToString(), model.Username);
if (_interaction.IsValidReturnUrl(model.ReturnUrl))
{
return Redirect(model.ReturnUrl);
}
return Redirect("~/");
}
ModelState.AddModelError("", "Invalid username or password.");
}
Мой вопрос заключается в том, как / где я могу заполнить это" location
"значение области" custom.profile
" для пользователя?
1 ответ:
Вам в основном нужно реализовать метод
GetProfileDataAsync
на службеIProfileService
, чтобы добавить некоторые утверждения.Поэтому при запуске убедитесь, что у вас есть что-то вроде:
identityServerBuilder.Services.AddScoped<IProfileService, ProfileService>();
А затем в вашем
ProfileService
классе есть что-то вроде этого:public Task GetProfileDataAsync(ProfileDataRequestContext context) { context.IssuedClaims.Add(new Claim()); //Your claims(s) }