使用 OpenId Connect 进行基于声明的身份验证
Claims Based Authentication with OpenId Connect
我正在使用 ASP.NET 核心与 OpenIddict、JWT、资源所有者授予和基于声明的角色。不强制执行任何策略的授权按预期工作。
我想对某些控制器和操作方法实施授权策略。我所有的用户都有角色声明,所以我在 Startup 中做了以下操作:
services.AddAuthorization(options =>
{
options.AddPolicy("Admin", p => p.RequireClaim("Admin");
});
我在操作方法上做了以下操作:
[Authorize("Admin")]
public async Task<string> Index()
{
return "Yes";
}
没有"Admin",我可以访问资源,添加"Admin"后我不能。
我假设是因为我生成的 JWT 令牌没有用户声明。
- 我的 JWT 是否应该包含用户角色声明才能使令牌正常工作?
- 如何使用 OpenIddict 发送角色声明?
您需要为要在访问令牌中复制的角色请求 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 核心与 OpenIddict、JWT、资源所有者授予和基于声明的角色。不强制执行任何策略的授权按预期工作。
我想对某些控制器和操作方法实施授权策略。我所有的用户都有角色声明,所以我在 Startup 中做了以下操作:
services.AddAuthorization(options =>
{
options.AddPolicy("Admin", p => p.RequireClaim("Admin");
});
我在操作方法上做了以下操作:
[Authorize("Admin")]
public async Task<string> Index()
{
return "Yes";
}
没有"Admin",我可以访问资源,添加"Admin"后我不能。
我假设是因为我生成的 JWT 令牌没有用户声明。
- 我的 JWT 是否应该包含用户角色声明才能使令牌正常工作?
- 如何使用 OpenIddict 发送角色声明?
您需要为要在访问令牌中复制的角色请求 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