【发布时间】:2020-02-21 13:35:18
【问题描述】:
当放置在控制器顶部时,Authorize Attribute 在 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 中工作?
【问题讨论】:
-
您添加服务的顺序很重要
-
仍然被拒绝访问。授权工作正常,但一旦添加管理员角色,我就会收到拒绝访问错误。
-
管理员是否在数据库中分配了该角色?
-
是的。我通过 userclaims 获得角色,用于通过 User 过滤链接。角色 = “管理员”不起作用。在控制器中调试用户显示他在登录后没有声明,但在登录期间 MyUserClaimsPrincipalFactory 运行良好并且声明存在。返回的身份范围不应该在启动后分配和持久化吗?
-
检查数据库。声明在 .net 核心中的工作方式不同
标签: asp.net asp.net-core