【问题标题】:ASP.NET MVC3 Role Authentication with Cookie and No SQL?使用 Cookie 和无 SQL 的 ASP.NET MVC3 角色身份验证?
【发布时间】:2012-04-20 13:48:55
【问题描述】:

我正在尝试使用角色进行表单身份验证,我有 global.asax Application_AuthenticateRequest 方法从 cookie 中获取角色,效果很好。但我不知道在 Web.Config 中配置什么提供程序。我不想使用 SQL 服务器,只使用 cookie。

这一行创建了 IPrincipal:(roles 是一个带有角色的字符串数组)

Context.User = new GenericPrincipal(Context.User.Identity, roles); 

最终目标是让 DataAnnotations 像 [Authorize(Roles = "Admin")] 和 IsInRole 方法正常工作。

此外,IsInRole 方法在 global.asax 中使用时效果很好,但在其他地方则不行。为什么不呢?

Web.config 目前配置如下:

<roleManager defaultProvider="DefaultRoleProvider" cacheRolesInCookie="true">

很遗憾,DefaultProvider 无缘无故地连接到了一些空的 SQL 数据库。

这可能吗?

谢谢。

【问题讨论】:

  • 使用此处第二个答案中的代码从 cookie 中获取角色:stackoverflow.com/questions/1385042/…
  • 原来是 Visual Studio 中的错误或导致问题的原因。当 Web 应用程序没有任何问题时,我上面提到的帖子中的代码按原样工作。

标签: asp.net asp.net-mvc-3 roles


【解决方案1】:

更好的选择可能是使用ASP.NET XmlProviders。 (无数据库)

或者,如果您只是不想拥有 SQL 服务实例,但想要拥有某种类型的数据库的优势,请使用 ErikJ's Sql CE MembershipProvider/RoleProviders。 (博客提到 CE 4.0 尚未准备好投入生产,但那是很久以前的事了,现在可以在较小的生产环境中使用。

更新

您当然可以扮演自己的 AuthroizeAttribute 角色并在派生的授权属性类上覆盖 OnAuthorize。

【讨论】:

  • 这两个对我来说似乎都是矫枉过正,不是吗?我只是想使用已经在校长中的角色。 ASP.NET 中不是已经有一个简单的解决方案了吗?
  • 不。如果没有分配了角色的用户/成员,您如何知道谁担任什么角色?我不喜欢重建一个运行良好的轮子。我个人在较小的网站上使用 CE 版本没有问题,并获得了提供商的全部好处(更少的登录工作,更多的工作满足实际的客户需求)。
  • 您的更新可能是可行的方法,但我不确定如何继续。此外,当我在 global.asax 中使用 IsInRole 方法时 - 它有效!但在其他地方使用时不会。有什么问题?
【解决方案2】:

根据您所说的,您不需要自己的提供商。所以你可以阅读并简单地设置authenticrequest。

现在的问题是您要将它们存储在哪里。你想如何存储它们?你只会将它们设置在cookie中吗?当然有一些你想要保留的持久存储,否则当 cookie 消失时,你如何刷新他们的角色?

【讨论】:

  • 我不需要存储,如果 cookie 过期,用户无论如何都会退出。当他们再次登录时,他们将获得一个包含角色数据的新 cookie。我可以使用身份验证请求做什么?
  • 当我为用户创建 cookie 时,它​​具有角色,Application_AuthenticateRequest 检索它。我使用这篇文章的第二个答案中的代码:stackoverflow.com/questions/1385042/…
  • 您在哪里存储您的角色。您的代码如何知道将哪个角色添加到 cookie 中?
【解决方案3】:

您为什么不直接使用内置角色提供程序并指定将角色缓存在 cookie 中,这样您在登录时只有一个数据库调用,然后它们会自动存储在 cookie 中。

<roleManager defaultProvider="DefaultRoleProvider" cacheRolesInCookie="true">

【讨论】:

  • 这就是我正在做的事情,这就是我的 web.config 的样子。但它不起作用:(
  • 因为 IsInRole 方法我得到了“假”。并且使用角色数据注释进行授权也不起作用。
猜你喜欢
  • 1970-01-01
  • 2014-04-04
  • 2012-08-08
  • 2015-01-09
  • 2011-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-19
相关资源
最近更新 更多