identityserver4 - 使用身份服务器 4 中的 CustomTokenRequestValidationContext 在令牌响应中返回用户角色
解决方案
由于违反 OAuth2 协议,这不是正确的概念,需要修改 IS4 的内部。
但是您可以实现从以下位置获取角色: - 用户信息端点 ( http://docs.identityserver.io/en/3.1.0/endpoints/userinfo.html ) - 访问令牌
对于最后一个变体,您应该覆盖配置文件服务 ( http://docs.identityserver.io/en/3.1.0/reference/profileservice.html)|
例如:
public class MyProfileService : IProfileService
{
private readonly UserManager<User> _userManager;
public MyProfileService(UserManager<User> userManager)
{
_userManager = userManager;
}
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var user = await _userManager.GetUserAsync(context.Subject);
var roles = await _userManager.GetRolesAsync(user);
var claims = new List<Claim>
{
new Claim(JwtClaimTypes.Email, user.Email),
new Claim(JwtClaimTypes.GivenName, user.FirstName),
new Claim(JwtClaimTypes.FamilyName, user.LastName),
new Claim(JwtClaimTypes.Name, $"{user.FirstName} {user.LastName}"),
new Claim(JwtClaimTypes.Locale, user.PreferredLanguage)
};
claims.AddRange(roles.Select(role => new Claim(JwtClaimTypes.Role, role)));
context.IssuedClaims.AddRange(claims);
}
public Task IsActiveAsync(IsActiveContext context)
{
context.IsActive = true;
return Task.CompletedTask;
}
}
别忘了注册
services.AddIdentityServer(options =>
{
...
})
.AddProfileService<MyProfileService>()
推荐阅读
- php - I am facing issue of HTTP ERROR 500 when i try ro login or just look on my website
- visual-studio-code - 我在 VScode 上单击了错误的按钮
- mariadb - MariaDB 查询 JSON 结果将文本列中的双引号转义为 \\"
- python - 将 python 日期时间值保存到带有时区字段的 mySQL 时间戳
- python - 如何编辑 Django 模型
- mysql - 如何组合 2 个 MySQL 函数
- r - 在 ggplot2 中使用 facet_grid() 时如何定义常见的 y 轴限制
- javascript - 问题:ParserError:第 1 行第 32 列的语法错误
- ios - 添加 YOChartImageKit 以查看的问题
- javascript - 如何使用指纹设备进行 webapp 身份验证?