繁体   English   中英

ASP.NET Core 3.0 基于角色的授权不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM