Simplemembership 实现匿名用户方法

6
Jon Galloway在他的博客http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx中概述了ASP.NET MVC 4中的新成员资格功能。Internet项目模板摆脱了ASP.NET核心成员提供程序,转向SimpleMembershipProvider和OAuth的世界。
关于simplemembership,有没有人知道是否可以使用开源http://aspnetwebstack.codeplex.com/来扩展它,以便能够允许存储在数据库中的匿名用户 - 可能是在userprofile表中?
我检查了http://msdn.microsoft.com/en-us/library/webmatrix.webdata.simplemembershipprovider simplemembership provider类,但其方法没有参考匿名身份验证。
如果不可能,有人有关于构建ExtendedMembershipProvider的信息吗?
更新信息:来自pro.asp.netmvc3书籍。关于身份验证授权-
启用匿名配置文件: 默认情况下,仅对经过身份验证的用户可用配置文件数据,并且如果我们尝试在当前用户未登录时编写配置文件属性,则会引发异常。我们可以通过启用对匿名配置文件的支持来更改此设置,如22-17清单所示。 当启用匿名标识时,ASP.NET框架将通过为他们提供一个名为.ASPXANONYMOUS的cookie来跟踪匿名用户,该cookie在10,000分钟后过期(大约为70天)。我们可以通过将allowAnonymous属性设置为true来启用对配置文件属性的匿名支持;在列表中,我们已启用了名称和城市属性的匿名支持。 启用匿名配置文件使读取和编写未经身份验证的用户的配置文件数据成为可能,但请注意,每个未经身份验证的访问者都将自动在配置文件数据库中创建一个用户帐户。
我想在simplemembership中复制这个功能。我不想使用旧的配置文件系统,因为它在blob中存储值。
<configuration>
<system.web>
<anonymousIdentification enabled="true"/>
<profile>
<providers>
<clear/>
<add name="AspNetSqlProfileProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="ApplicationServices"
applicationName="/" />
</providers>
<properties>
<add name="Name" type="String" allowAnonymous="true"/>
<group name="Address">
<add name="Street" type="String"/>
<add name="City" type="String" allowAnonymous="true"/>
<add name="ZipCode" type="String"/>
<add name="State" type="String"/>
</group>
</properties>
</profile>
</system.web>
</configuration>

当启用匿名身份验证时,ASP.NET框架将通过为其提供一个名为.ASPXANONYMOUS的cookie来跟踪匿名用户,该cookie在10,000分钟后过期(大约70天)。我们可以通过将allowAnonymous属性设置为true来启用对个人资料属性的匿名支持;在清单中,我们已经启用了对姓名和城市属性的匿名支持。

你的问题不是很清楚,'anonymous users stored in database' 是什么意思?如果用户是匿名的,在SimpleMembership中你要寻找什么样的身份识别?如果你能澄清概念/需求,那么更容易帮助你。 - user474407
@Vijay 您好,感谢您的回复。匿名用户是指未注册但选择了例如语言的用户。为了提供更多细节:可以使用 GUID 示例在 cookie 中跟踪用户,但不是从 cookie 中读取语言,而是读取 cookie 并检查数据库中的 GUID 是否具有以前在数据库中选择的语言。SimpleMembership 有像 CreateAccount(String, String) 等方法,但它们都不会创建匿名用户,当他们填写详细信息并创建帐户时,这些用户将被转换为注册用户。敬礼! - s_h
@Vijay 另外,我不知道如果我直接在那个表里创建一个方法是否会影响安全性。 - s_h
嗨,谢谢。但是由于我们无法在书中看到22-17清单,请问您能否解释一下它的内容? - Matty J
@MattyJ 已更新.. 敬礼! - s_h
1个回答

3
我认为您所描述的情况是用户在注册应用程序时,可能未经确认、未完成其个人资料或其他标准;在完成这些要求之前,他们被视为匿名用户,具有对应用程序的有限访问权限。我假设用户已输入一些最低信息以识别用户,例如用户名和密码。
处理这种情况最简单的方法可能是创建一个“匿名”角色,所有新用户都会自动分配到该角色。现在,您可以使用基本的表单身份验证方法,使用AuthorizeAttribute限制对控制器/操作的访问。一旦用户完成了不再是匿名用户的标准,您可以切换他们的角色或者只需添加一个新角色,使他们获得完全访问权限。
如果用户确实是匿名的,且您无法识别他们,您仍将使用基于角色的授权和表单身份验证,通过使用AllowAnonymousAttribute修饰您希望允许访问的区域来给予受限访问权限。 根据更新后的问题更新答案

请看此ASP.NET论坛中的答案。基本上它所说的是,您可以通过管理自己的cookie和自己的数据库架构来实现您的目标,但作为SimpleMembership提供程序的一部分将无法工作。


您好,感谢您的回复。我已编辑了问题并添加了更多信息。敬礼。 - s_h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接