gpt4 book ai didi

c# - 登录后不包括 IdentityServer AdditionalClaims

转载 作者:行者123 更新时间:2023-12-04 09:36:19 26 4
gpt4 key购买 nike

我正在设置 IdentityServer 的一个新实例作为身份提供者。登录时,我想在我的用户对象上设置一些额外的自定义声明。现在,我正在使用以下代码:

[HttpPost]
public async Task<IActionResult> ExecuteLogin(string returnUrl, string loginId)
{
TestUser user = Config.GetUsers().Find(x => x.SubjectId == loginId);
if (user != null)
{
var identityServerUser = new IdentityServerUser(user.SubjectId)
{
AdditionalClaims = user.Claims
};

await HttpContext.SignInAsync(identityServerUser);
return Redirect(returnUrl);
}
else
{
return Redirect("Login");
}
}
我希望 AdditionalClaims 出现在接收应用程序的 User.Claims 对象上,我使用如下:
[Authorize]
public class HomeController : Controller
{
public IActionResult Index()
{
var claims = User.Claims;
return View(claims);
}
}
但是,在 View 中只有标准声明是可见的。不是我的额外要求。
在 IdentityServer 的设置中,我指定了一个可以访问这些声明所在范围的客户端,以及一个具有 TestUser 中指定的声明类型的 IdentityResource。在接收应用程序中,我指定我想要接收该范围。
是什么导致我的声明在接收应用程序中不可见?

最佳答案

没有说明您使用的是哪种类型的身份验证,但我想您想将声明添加到 access_token从哪里可以在 API 上读取它们。AdditionalClaimsIdentityServerUser仅添加到您客户端的 cookie 中。
您需要做的是创建一个配置文件服务( https://docs.identityserver.io/en/latest/reference/profileservice.html )。
最简单的就是这样:

public class ProfileService : IProfileService
{
private UserService _userService;

public ProfileService(UserService userService)
{
_userService = userService;
}

public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var user = await _userService.GetUserByIdAsync(context.Subject.GetSubjectId());
context.IssuedClaims.AddRange(user.Claims);
return Task.FromResult(0);
}

public Task IsActiveAsync(IsActiveContext context)
{
var user = await _userService.GetUserByIdAsync(context.Subject.GetSubjectId());
context.IsActive = user.IsActive;

return Task.FromResult(0);
}
}
并在 Startup.cs 中注册它:
services.AddIdentityServer()
.AddProfileService<ProfileService>();
然后可以从 API 端的 access_token 读取这些(如果这是您想要的,因为问题中不清楚):
var user = User.Identity as ClaimsIdentity;
var claims = user.Claims;

关于c# - 登录后不包括 IdentityServer AdditionalClaims,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62571648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com