我遇到类似的问题:https://github.com/IdentityServer/IdentityServer3.Samples/issues/9
但是解决方案对我没有帮助。
所以让我们用图片和代码详细解释:
我在客户端有这个:
无需映射,因为NameClaimType(RoleClaimType)和声明列表中的声明相同
JwtSecurityTokenHandler.InboundClaimTypeMap.Clear();
在Api项目上我有:
在这种情况下(如果我理解正确的话),我必须要映射,因为NameClaimType& RoleClaimType与声明值不同。
JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>
{
{"role", System.Security.Claims.ClaimTypes.Role},
{"name",System.Security.Claims.ClaimTypes.Name }
};
但仍然无法正常工作。我做错了什么?
答案 0 :(得分:3)
InboundClaimTypeMap用于转换传入的声明。它不会设置NameClaimType
和RoleClaimType
属性。
您的身份验证中间件应该可以选择设置名称和角色声明类型。例如: -
app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
...,
NameClaimType = System.Security.Claims.ClaimTypes.Name,
RoleClaimType = System.Security.Claims.ClaimTypes.Role
});