【发布时间】:2019-10-10 10:46:58
【问题描述】:
我有一个 SPA,它有一个 ASP.NET Core Web API 以及使用 AddIdentityServer 和 AddIdentityServerJwt 打开的内置身份服务器:
services.AddIdentityServer()
.AddApiAuthorization<User, UserDataContext>();
services.AddAuthentication()
.AddIdentityServerJwt();
我还有一个需要“管理员”角色声明的授权策略设置:
services.AddAuthorization(options =>
{
options.AddPolicy("IsAdmin", policy => policy.RequireClaim(ClaimTypes.Role, "Admin"));
});
我有一个使用此策略的控制器操作
[Authorize(Policy = "IsAdmin")]
[HttpDelete("{id}")]
public IActionResult Deleten(int id)
{
...
}
经过身份验证的用户确实拥有“管理员”角色声明:
此身份验证用户的访问令牌似乎不包含管理员声明:
我在尝试向管理员用户请求此资源时返回 403:
所以,如果我理解正确的话,IdentityServer 不包括管理员角色声明,因此用户无权访问该资源。
是否可以使用 AddIdentityServerJwt 配置 IdentityServer 使用的声明?还是我误解了为什么这不起作用。
【问题讨论】:
-
您需要将声明添加到您的令牌中。我会在早上给你发一些代码
-
我相信这是因为实现不会自动映射自定义声明。请参阅我关于到目前为止发现的问题:stackoverflow.com/questions/56368522/…
标签: asp.net-core jwt identityserver4 openid-connect