ASP.NET Core 3.0 Ролевая авторизация не работает - PullRequest
0 голосов
/ 16 октября 2019

У меня есть приложение 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 роли, т.е. Админ и Пользователь. Однако учетная запись пользователя без роли администратора может получить доступ к методу действия «Индекс». Это позволяет любому авторизованному пользователю получить доступ к странице и не ограничивает доступ к пользователю, которому принадлежит подходящая роль - роль администратора. Чего мне не хватает?

1 Ответ

0 голосов
/ 17 октября 2019

Проверьте ваш пользовательский объект, если у него есть роль администратора. Вы можете удалить эту строку из своего кода, если вы используете свойство role в авторизации.

options.AddPolicy("Admin", authBuilder => { authBuilder.RequireRole("Admin"); });

Надеюсь, это поможет.

...