У меня есть приложение 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 у меня есть соответствующий атрибут Authorize, например,
[Authorize(Roles = "Admin")]
public ActionResult Index()
{
var users= getSomeUsers();
return View(users);
}
В таблице AspNetRoles есть 2 роли, т.е. Админ и Пользователь. Однако учетная запись пользователя без роли администратора может получить доступ к методу действия «Индекс». Это позволяет любому авторизованному пользователю получить доступ к странице и не ограничивает доступ к пользователю, которому принадлежит подходящая роль - роль администратора. Чего мне не хватает?