【发布时间】:2017-11-17 06:12:26
【问题描述】:
在this guide 之后,我能够使用
进行身份验证Microsoft.AspNetCore.Identity.EntityFrameworkCore
Microsoft.AspNetCore.Authentication.JwtBearer
现在我正在尝试使用角色或声明来保护我的 api 端点。我都试过了,结果相同(403)
仅使用 [Authorize] 即可。
我的代码目前看起来像这样:
控制器:
[Authorize(Policy = "RequireUserRole")]
// Also tried [Authorize(Roles="User")]
public string Get()
{
return "YO";
}
启动:
services.AddIdentity<IdentityUser, IdentityRole>().AddEntityFrameworkStores<ApplicationContext>();
services.Configure<JWTSettings>(Configuration.GetSection("JWTSettings"));
services.AddAuthorization(options =>
{
options.AddPolicy("RequireUserRole", policy => policy.RequireRole("User"));
});
...
app.UseIdentity();
var secretKey = Configuration.GetSection("JWTSettings:SecretKey").Value;
var issuer = Configuration.GetSection("JWTSettings:Issuer").Value;
var audience = Configuration.GetSection("JWTSettings:Audience").Value;
var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secretKey));
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = signingKey,
// Validate the JWT Issuer (iss) claim
ValidateIssuer = true,
ValidIssuer = issuer,
// Validate the JWT Audience (aud) claim
ValidateAudience = true,
ValidAudience = audience,
ValidateLifetime = true
}
});
app.UseMvcWithDefaultRoute();
当我创建用户时,我将其分配给角色“用户”
await _userManager.AddToRoleAsync(user, "User");
角色关系创建成功,但到达端点时角色验证失败。
任何帮助表示赞赏!
【问题讨论】:
-
对我来说值得注意的是
.RequrieClaim("role", "admin")不起作用,.RequireRole("admin")这样做了,感谢您给了我尝试的想法 -
我不得不为 Azure 应用程序授权更改角色声明类型:options.TokenValidationParameters.RoleClaimType = "schemas.microsoft.com/ws/2008/06/identity/claims/role";
标签: asp.net asp.net-core asp.net-identity jwt claims-based-identity