如何使用InboundClaimTypeMap进行声明映射?

时间:2016-02-25 09:02:23

标签: c# asp.net-web-api thinktecture-ident-server

我遇到类似的问题:https://github.com/IdentityServer/IdentityServer3.Samples/issues/9

但是解决方案对我没有帮助。

所以让我们用图片和代码详细解释:

我在客户端有这个:

enter image description here

无需映射,因为NameClaimType(RoleClaimType)和声明列表中的声明相同

JwtSecurityTokenHandler.InboundClaimTypeMap.Clear();

在Api项目上我有:

enter image description here

在这种情况下(如果我理解正确的话),我必须要映射,因为NameClaimType& RoleClaimType与声明值不同。

    JwtSecurityTokenHandler.InboundClaimTypeMap = new Dictionary<string, string>
    {
        {"role", System.Security.Claims.ClaimTypes.Role},
        {"name",System.Security.Claims.ClaimTypes.Name }
    };

但仍然无法正常工作。我做错了什么?

1 个答案:

答案 0 :(得分:3)

InboundClaimTypeMap用于转换传入的声明。它不会设置NameClaimTypeRoleClaimType属性。

您的身份验证中间件应该可以选择设置名称和角色声明类型。例如: -

app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
                {
                    ...,
                    NameClaimType = System.Security.Claims.ClaimTypes.Name,
                    RoleClaimType = System.Security.Claims.ClaimTypes.Role 
                });