基于角色的授权在.net 5 中不起作用[已关闭]

问题描述 投票:0回答:1

问题陈述:我遇到了这个问题,角色基础授权 (

[Authorize(Roles = "Admin")]
) 在 asp .net 5 中没有按预期工作,角色声明未添加到身份中。

我用谷歌搜索并尝试了很多解决方案,最后我找到了答案。所以我分享一些场景,以便它可能对某人有所帮助。

asp.net-core asp.net-core-5.0 asp.net-authorization authorize
1个回答
0
投票

如果您有一个继承自 IdentityUser 的自定义用户

例如:

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

并且您已正确配置服务,如下所示:

services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
                    .AddRoles<IdentityRole>()
                    .AddRoleManager<RoleManager<IdentityRole>>() /* Added role manager*/
                    .AddDefaultUI()
                    .AddEntityFrameworkStores<ApplicationDbContext>();

如果您没有为 UserPrincipal 使用自定义声明主体,那么应该可以正常工作。

例如:

public class AppUserClaimsIdentityFactory : UserClaimsPrincipalFactory<ApplicationUser>
{   
    public AppUserClaimsIdentityFactory(
            UserManager<ApplicationUser> userManager,
            IOptions<IdentityOptions> optionsAccessor)
            : base(userManager, optionsAccessor)
    {
    }
    
    /* code implementation */
}

并使用 DI 注入它,如下所示:

services.AddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, AppUserClaimsIdentityFactory>();

在这种情况下它不起作用,您需要为 UserClaimsPrincipalFactory 使用不同的构造函数重载并向其添加角色管理器。

更新您的自定义 UserClaimsIdentityFactory:

public class AppUserClaimsIdentityFactory : 
        UserClaimsPrincipalFactory<ApplicationUser,
                                   IdentityRole>
        /* Note: you can use your custom Role class or identity default */
{
    public AppUserClaimsIdentityFactory(
            UserManager<ApplicationUser> userManager,
            RoleManager<IdentityRole> roleManager, /* Add role manager */
            IOptions<IdentityOptions> optionsAccessor)
            : base(userManager, roleManager /* send it to base constructor */, optionsAccessor)
    {
    }

    /* code implementation */
}

您不必为自定义 UserClaimsPrincipalFactory 更改 依赖注入 容器中的任何内容。

一切都应该按预期正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.