我没有运气可以在.Net Core 3中使用任何角色或策略属性。我从带有身份验证的.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.RequireClaim(ClaimTypes.Role,“ admin”);});});