0

我正在尝试使用角色进行表单身份验证,我有 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 数据库。

这甚至可能吗?

谢谢。

4

3 回答 3

0

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

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

更新

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

于 2012-04-07T05:35:23.450 回答
0

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

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

于 2012-04-07T05:55:46.157 回答
0

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

<roleManager defaultProvider="DefaultRoleProvider" cacheRolesInCookie="true">
于 2012-04-07T06:00:47.490 回答