我将 ASP.NET Core 与 OpenIddict、JWT、资源所有者授予和基于声明的角色一起使用。未执行任何策略的授权按预期工作。

我想对某些 Controller 和操作方法强制执行授权策略。我的所有用户都有角色声明,所以我在 Startup 中执行了以下操作:

services.AddAuthorization(options =>
{
    options.AddPolicy("Admin", p => p.RequireClaim("Admin");
});

我对 action 方法做了以下操作:
[Authorize("Admin")]
public async Task<string> Index()
{
    return "Yes";
}

没有“管理员”,我能够访问资源,添加“管理员”后我不能。

我假设是因为我生成的 JWT token 没有用户声明。
  • 我的 JWT 是否应该包含使 token 工作的用户角色声明?
  • 如何使用 OpenIddict 发送角色声明?
  • 最佳答案

    您需要为要在访问 token 中复制的角色请求 roles 范围(将来可能会更改)。

    POST /connect/token HTTP/1.1
    Host: server.example.com
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=password&username=johndoe&password=A3ddj3w&scope=roles
    

    关于asp.net-core - 使用 OpenId Connect 进行基于声明的身份验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38547157/

    10-16 15:44