基于角色ID无效的ASP.Net MVC个人(身份)授权

时间:2016-08-25 14:32:12

标签: c# authentication asp.net-mvc-5

我在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是否与所有者角色相关
enter image description here
4-注销并再次登录以重置cookie

然而有趣的是[Authorize(Roles = "Owner")]无效。请帮我。谢谢

1 个答案:

答案 0 :(得分:1)

您是否可以确保包含身份验证证书的Cookie附带包含证书中角色的声明?

Authorize只会读取您的身份验证证书并尝试确定是否提及任何角色。如果您的身份验证cookie不包含有关经过身份验证的用户的角色的任何信息,那么它将无法正常工作。 :)