具有 ASP.NET 标识的授权属性



我有一个受[Authorize]属性保护的控制器。

这工作得很好(如果我没有登录,我会被送回登录),但我希望向此属性添加一些角色,我已经读过可以做类似[Authorize(Roles = "Customer"]的事情,但是当我这样做时,我立即被发送回我的应用程序的登录页面?

Roles替代是否不适用于新的 ASP.NET 标识?在我的用户创建中,我通过以下代码将用户添加到 中:

var user = new ApplicationUser {UserName = model.Username};
var result = UserManager.Create(user, model.Password);
if (result.Succeeded)
{
    UserManager.AddToRole(user.Id, "Customer");
    SignIn(user, false);
    return RedirectToAction("Done");
}

根据数据库,用户处于此角色。为什么这不起作用?我是否缺少配置或某种配置?

我将回答我自己的问题。

这不起作用(数小时挖掘)的原因是因为我的上下文具有以下内容:

Configuration.ProxyCreationEnabled = false;

这使得延迟加载被禁用,因此在加载用户时不包括角色!

因此,解决方法是启用此功能或删除该行。

更新日期: 2015-05-01

这是一个错误,在 2.0.0-alpha1 版本中修复。因此,以后不再需要此解决方法,并且无论此设置如何,角色都将加载。

Identity Owin 需要 LazyLoading 吗?

创建一个角色,如下所示:

RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new MyDbContext()));
var roleresult = RoleManager.Create(new IdentityRole(roleName));

然后,添加如下所示的用户:

var currentUser = UserManager.FindByName(user.UserName); 
var roleresult = UserManager.AddToRole(currentUser.Id, "Superusers");

请让我知道这是否适合您。

在我的情况下,它与AspNet Identity一起工作得很好。你确定你:

  • 尚未自定义授权筛选器或做得正确?
  • 尚未在 Web.config 中重新配置身份验证/授权?
  • 在 AspNet 标识表中有正确的条目:AspNetUsers、AspNetRoles、AspNetUserRoles(角色存在,用户拥有它)?

查看此答案:ASP.NET 身份检查用户角色不起作用

在您的情况下,在检查案例时,比较身份角色记录和授权属性的大小写。不要与UserManager.AddToRole(user.Id, "Customer");进行比较

我写了一个示例来测试它,它 good.so 我认为有 2 点
有效1.您的cookie不保存到浏览器
2.你没有角色信息

检查你的饼干,有没有一个名为"的饼干。AspNet.ApplicationCookie"(默认名称)
如果不是这样,请检查您是否允许编写cookie,或您编写cookie
的代码如果存在,可以创建一个类扩展

ISecureDataFormat<AuthenticationTicket>  

和配置

app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            TicketDataFormat=new T()
        });

新 T() 是类
在本课程中,您需要做

public string Protect(AuthenticationTicket data)

public AuthenticationTicket Unprotect(string protectedText)

这是关于序列化
的一些事情您可以设置断点,并检查数据,
在数据中。Identity.Claims(IEnumerable)应具有包含角色信息的声明

相关内容

  • 没有找到相关文章

最新更新