授权 Role/Policy 属性在 .Net Core 3 中不起作用
Authorization Role/Policy Attributes Not Working In .Net Core 3
我没能在 .Net Core 3 中获得任何 Role 或 Policy 属性。我从 .Net Core Angular 启动项目开始了我的项目,并进行了身份验证。
我认为这与新的 .AddDefault 方法有关,所以我尽可能地简化了它,但它仍然不起作用。
这是我的政策:
services.AddAuthorization(options =>
{
options.AddPolicy("IsAdmin", policy =>
policy.RequireClaim("role", "admin"));
});
这是我的控制器:
[Authorize(Policy = "IsAdmin")]
[Route("api/[controller]")]
public class AdminController : Controller
{
...
我制作了一个自定义配置文件服务,将声明添加到令牌中,
var claims = new List<Claim>();
if (await _userManager.IsInRoleAsync(user, "Admin"))
{
claims.Add(new Claim(JwtClaimTypes.Role, "admin"));
}
context.IssuedClaims.AddRange(claims);
在我的访问令牌中(来自 jwt.io):
配置服务的其他部分:
services.AddDefaultIdentity<ApplicationUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
...
services.AddAuthentication()
.AddIdentityServerJwt();
普通 [Authorize]
标签与其他控制器上的访问令牌一起工作正常。
当我用访问令牌点击这个控制器时,我得到一个 403
响应
我错过了什么阻止它工作?
我尝试了您的代码,发现 role
声明密钥已转换为 standard Role ClaimsType:http://schemas.microsoft.com/ws/2008/06/identity/claims/role
所以使用 ClaimTypes.Role
将解决问题:
services.AddAuthorization(options => {
options.AddPolicy("IsAdmin", policy =>
{
policy.RequireClaim(ClaimTypes.Role,"admin");
});
});
演示
我没能在 .Net Core 3 中获得任何 Role 或 Policy 属性。我从 .Net Core Angular 启动项目开始了我的项目,并进行了身份验证。 我认为这与新的 .AddDefault 方法有关,所以我尽可能地简化了它,但它仍然不起作用。
这是我的政策:
services.AddAuthorization(options =>
{
options.AddPolicy("IsAdmin", policy =>
policy.RequireClaim("role", "admin"));
});
这是我的控制器:
[Authorize(Policy = "IsAdmin")]
[Route("api/[controller]")]
public class AdminController : Controller
{
...
我制作了一个自定义配置文件服务,将声明添加到令牌中,
var claims = new List<Claim>();
if (await _userManager.IsInRoleAsync(user, "Admin"))
{
claims.Add(new Claim(JwtClaimTypes.Role, "admin"));
}
context.IssuedClaims.AddRange(claims);
在我的访问令牌中(来自 jwt.io):
配置服务的其他部分:
services.AddDefaultIdentity<ApplicationUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
...
services.AddAuthentication()
.AddIdentityServerJwt();
普通 [Authorize]
标签与其他控制器上的访问令牌一起工作正常。
当我用访问令牌点击这个控制器时,我得到一个 403
响应
我错过了什么阻止它工作?
我尝试了您的代码,发现 role
声明密钥已转换为 standard Role ClaimsType:http://schemas.microsoft.com/ws/2008/06/identity/claims/role
所以使用 ClaimTypes.Role
将解决问题:
services.AddAuthorization(options => { options.AddPolicy("IsAdmin", policy => { policy.RequireClaim(ClaimTypes.Role,"admin"); }); });