ASP.NET MVC3 角色身份验证,使用 Cookie 和无 SQL



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

此行创建 IPrincipal: (roles 是包含角色的字符串数组)

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

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

此外,IsInRole 方法在 global.asax 中使用时工作正常,但在其他地方则不能。为什么不呢?

Web.config 现在配置为这样:

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

可悲的是,默认提供程序无缘无故地连接到一些空的 SQL 数据库。

这可能吗?

谢谢。

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

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

更新

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

根据您所说的内容,您不需要自己的提供程序。因此,您可以阅读并简单地设置身份验证请求。

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

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

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

最新更新