[英]Role based authorization attribute not working in ASP.NET Core MVC
[英]ASP.NET Core 3.0 Role Based Authorization not working
我有一个 ASP.NET Core 3.0 应用程序。 我正在使用基于角色的授权。 我的 Startup.cs 看起来像这样。
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication().AddCookie();
services.AddAuthorization(options =>
{
options.AddPolicy("Admin", authBuilder => { authBuilder.RequireRole("Admin"); });
});
services.AddIdentity<SiteUser, IdentityRole>(x =>
{
x.Lockout.AllowedForNewUsers = true;
x.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(2);
x.Lockout.MaxFailedAccessAttempts = 3;
x.Password.RequireNonAlphanumeric = true;
x.Password.RequireUppercase = true;
}).AddEntityFrameworkStores<SiteDbContext>();
services.AddDbContext<SiteDbContext>(dbContextOptionBuilder =>
dbContextOptionBuilder.UseLoggerFactory(ConsoleFactory)
.UseSqlServer(Configuration.GetConnectionString(ConfigurationSettings.LocalDbKeyName)));
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error/500");
app.UseStatusCodePagesWithReExecute("/Error/{0}");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});
app.UseAuthentication();
app.UseAuthorization();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllers();
});
在我的 Controller class 中,我有适当的 Authorize 属性,如下所示,
[Authorize(Roles = "Admin")]
public ActionResult Index()
{
var users= getSomeUsers();
return View(users);
}
AspNetRoles 表中有 2 个角色,即。 管理员和用户。 但是,没有管理员角色的用户帐户可以访问 Index 操作方法。 它允许任何经过身份验证的用户访问该页面,而不是将访问限制为拥有正确角色(即管理员角色)的用户。 我错过了什么?
检查您的用户 object 是否具有管理员角色。 如果您在授权中使用角色属性,则可以从代码中删除此行。
options.AddPolicy("Admin", authBuilder => { authBuilder.RequireRole("Admin"); });
尽管我最初接受了@Ruard van Elburg 的答案,但是尽管有app.UseRouting();
,但问题仍然神秘地出现。 在app.UseAuthorization(); app.UseAuthentication();
app.UseAuthorization(); app.UseAuthentication();
在我的 startup.cs 文件的 Configure 方法中。 所以我开始了一个新项目并添加了相同的文件,令我惊讶的是,它奏效了。 在比较了两个项目中的每个设置后,我发现我在“调试”选项卡的项目属性中关闭了“启用 SSL”。
所以我启用了 SSL,现在它工作得很好。 如果您遇到类似的问题并且重新安排中间件没有帮助,请检查您是否从项目属性页面中启用了 SSL。 希望这可以帮助某人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.