授权角色控制器属性在ASP Core 2.2中不起作用

时间:2019-10-25 07:58:11

标签: asp.net asp.net-core

当放在控制器顶部时,授权属性在ASP Core 2.2中不起作用。我将我的startup.cs配置为这样。

        //Add Claims
        services.AddScoped<IUserClaimsPrincipalFactory<User>, UserClaimsPrincipalFactory<User, Role>();

        //Add Context
        services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
        services.AddHttpContextAccessor();
        services.AddDbContext<DbContext>();
        services.AddIdentity<User, Role>(
            config =>
            {
                config.SignIn.RequireConfirmedEmail = true;
                config.User.RequireUniqueEmail = true;
            }
            )
            .AddRoles<Role>()
            .AddRoleManager<RoleManager<Role>>()
            .AddDefaultUI(UIFramework.Bootstrap3)
            .AddDefaultTokenProviders()
            .AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>()
            .AddEntityFrameworkStores<DbContext>();


        //Add MVC
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        services.AddAuthorization();
        services.AddAuthentication();

UserClaimsPrincipalFactory可以正常工作,我可以通过UserManager访问视图中的声明,并根据声明中的角色过滤链接。

但是当我在控制器上执行此操作时。

    [Authorize(Roles = "Administrator")]
    [HttpGet]
    public async Task<IActionResult> Index()
    {
      return View();
    }

它不起作用,尽管我具有身份所需的角色,但我仍然无法访问。这是一个已知的错误,是否有人设法使角色属性在ASP Core 2.2中工作?

2 个答案:

答案 0 :(得分:0)

    //Add Claims
    services.AddScoped<IUserClaimsPrincipalFactory<User>, 
    UserClaimsPrincipalFactory<User, Role>();

    //these should be move AddMvc
    services.AddAuthorization();
    services.AddAuthentication();

    //Add Context
    services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    services.AddHttpContextAccessor();
    services.AddDbContext<DbContext>();
    services.AddIdentity<User, Role>(
        config =>
        {
            config.SignIn.RequireConfirmedEmail = true;
            config.User.RequireUniqueEmail = true;
        }
        )
        .AddRoles<Role>()
        .AddRoleManager<RoleManager<Role>>()
        .AddDefaultUI(UIFramework.Bootstrap3)
        .AddDefaultTokenProviders()
        .AddClaimsPrincipalFactory<MyUserClaimsPrincipalFactory>()
        .AddEntityFrameworkStores<DbContext>();


    //Add MVC
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

答案 1 :(得分:0)

我已经基于在ASP Core 2.2中工作的声明获得了Roles。没有声明的角色不起作用(可以在ASP Core 3.0中修复)。

创建角色(角色表)并向这些角色添加用户(UserRole表)后,需要向RoleClaim和UserClaim表添加值。

编辑...

基本上将用户添加到角色,并使用IUserClaimsPrincipalFactory中的claimtypes.role返回角色或使用usermanager和rolemanager手动添加userclaim角色。