我一直在使用身份服务器快速启动应用程序,我想在调用userinfo端点时添加要返回的角色信息。
public Claim[] GetUserClaims(UserServiceProxy.Dto.User user)
{
return new Claim[]
{
new Claim(JwtClaimTypes.Name, user.Username),
new Claim(JwtClaimTypes.Email, user.Email),
new Claim(JwtClaimTypes.GivenName, user.Firstname),
new Claim(JwtClaimTypes.FamilyName, user.Lastname),
new Claim(JwtClaimTypes.Subject, user.Username),
new Claim(JwtClaimTypes.Role, user.Role ?? "normal"), //have added this
};
}
,这是从我的GetProfileDataAsync
调用的if (context.RequestedClaimTypes.Any())
{
var user = UserClient.FindByUserName(context.Subject.GetSubjectId());
if (user != null)
{
context.AddRequestedClaims(UserClient.GetUserClaims(user.Result.User));
}
}
当我调用/ connect / userinfo端点时,我得到了这个(没有角色):
{ “名称”: “joe3”, “GIVEN_NAME”: “乔”, “FAMILY_NAME”: “三”, “分”: “joe3”}
答案 0 :(得分:2)
没关系,我发现问题是我需要:
将Role的新Identity资源添加到返回的列表中 GetIdentityResources
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResources.Email(),
new IdentityResource{Name = "roles", UserClaims={JwtClaimTypes.Role}}
};
}
将角色范围添加到客户端的AllowedScopes列表
AllowedScopes = new List<string>
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email,
"roles",
},
在请求中添加对角色范围的请求。
"RequestedScopes": "openid profile email roles",