我在ASP.Net MVC 5中使用个人身份验证。
我在上下文中为“Admin”用户设置了密码“12345678”,并且它的角色为“Owner”。 如在这里:
if (!context.Roles.Any(r => r.Name == "Owner"))
{
var rolestore = new RoleStore<IdentityRole>(context);
var rolemanager = new RoleManager<IdentityRole>(rolestore);
var role = new IdentityRole {Name = "Owner"};
rolemanager.Create(role);
if (!context.Users.Any(u => u.UserName == "Admin"))
{
var userstore = new UserStore<AppUser>(context);
var usermanager = new UserManager<AppUser>(userstore);
var user = new AppUser()
{
UserName = "Admin",
PasswordHash = usermanager.PasswordHasher.HashPassword("12345678"),
Role = "Owner"
};
usermanager.Create(user);
usermanager.AddToRole(user.Id, "Owner");
}
}
}
问题:
我需要在我的应用程序中使用基于角色的身份验证,但是当我使用[Authorize(Roles =“Owner”)]时,我被重定向到登录页面。
但使用[授权]或[授权(用户=“管理员”)]工作正常,但我需要基于角色的身份验证才能正常工作。
到目前为止我已完成的故障排除:
1-在上下文this.Configuration.LazyLoadingEnabled = true;
中启用延迟加载
2-从Web.config中删除<remove name="RoleManager"/>
3-确保数据库查看Admin是否与所有者角色相关
4-注销并再次登录以重置cookie
然而有趣的是[Authorize(Roles = "Owner")]
无效。请帮我。谢谢
答案 0 :(得分:1)
您是否可以确保包含身份验证证书的Cookie附带包含证书中角色的声明?
Authorize
只会读取您的身份验证证书并尝试确定是否提及任何角色。如果您的身份验证cookie不包含有关经过身份验证的用户的角色的任何信息,那么它将无法正常工作。 :)