【问题标题】:ASP.NET Identity - Maintaining information about anonymous usersASP.NET 身份 - 维护有关匿名用户的信息
【发布时间】:2016-09-21 10:49:43
【问题描述】:

我只是在研究ASP.NET Identity,这似乎是当今 ASP.NET 应用程序中用户身份验证最可取的解决方案(替换过去的所有 ASP.NET 成员资格)。

我正在寻找一种可以维护匿名用户信息的解决方案。 即使用户未通过身份验证,我们也可以收集和存储大部分个人资料数据,如果用户通过身份验证,我们可以存储这些数据。

即使用户是匿名的,存储以下数据也是有意义的:

  • 购物车
  • cmets 他写在网站上(这样他就可以作为它们的创建者编辑它们)
  • 各种网站偏好(他的首选语言和许多其他设置)

然后,当用户注册时,我们可以提供将其中一些数据复制到他的新用户配置文件中(或自动复制),具体取决于它是什么数据。

是否有可能用 ASP.NET Identity 实现这种场景? 似乎当用户在 ASP.NET Identity 中是匿名的时,他无法拥有任何用户配置文件数据。

为了使用相同的表来存储所有这些信息作为经过身份验证的用户,我们可能需要在系统中为每个来到站点的新访问者创建一个新用户,并执行一些需要存储某些用户的操作数据。

之后,我们需要将一些 cookie 标识符传递给用户,以便我们始终可以将数据连接到用户,这可以看作是某种形式的身份验证(尽管对实际用户不可见)。这样,来宾用户实际上可以代表系统的经过身份验证的用户(也许他只是有一个特殊的角色?),尽管据他所知他是匿名的。

您如何看待这种方法? ASP.NET Identity 有什么方法可以帮助解决这个问题吗?

我找到了这两个相关的 Stack Overflow 问题,但我没有在其中找到答案:


编辑:

我发现在 ASP.NET 中有一种称为匿名识别的机制似乎可以解决部分问题。

https://msdn.microsoft.com/en-us/library/91ka2e6a(v=vs.85).aspx

也许它可以以某种方式与 ASP.NET Identity 集成?

Edit2: 如 cmets 所述,匿名识别 的文档似乎已经过时,而且微软很可能在未来不会过多关注这一点.首选使用 ASP.NET Identity 或其他基于 OWIN 的解决方案的解决方案。

【问题讨论】:

  • 恐怕身份在这里帮不了你太多。这里没有内置功能——你必须自己想出大部分东西。但是,您可以使用一些 OWIN cookie 中间件来处理声明和 cookie。
  • 我已经使用 OWIN 完成了用户身份验证 cookie 而没有身份。相关部分可以看这里:github.com/trailmax/OwinADAuthentication/blob/master/…
  • @trailmax:感谢您的回复。我喜欢 ASP.NET Identity 中的大部分功能并计划使用它们,因此我更多地研究如何将这些来宾用户集成到 ASP.NET Identity 框架中。
  • 我想更多的是在不涉及身份的情况下从 OWIN 向匿名用户提供 cookie,但放置一些标识符,您可以将这些标识符与您存储的有关这些用户的信息相关联。但是一旦他们注册 - 检查该相关 ID 是否存在 - 并检索相关数据并复制到实际记录信息。
  • 我真的认为在这种情况下,你会与身份抗争,而不是它给你带来的好处。我会遇到所需的电子邮件、用户名等。

标签: asp.net asp.net-mvc asp.net-identity


【解决方案1】:

Asp.Net Identity 没有这样的东西,即使通过 hip IP 或浏览器中的 Cookie 也无法安全识别匿名用户,您可以要求用户以非常少的信息或通过 FB 或 Twitter 注册尽可能缩短注册过程,然后他可以完成他的个人资料,这样您就可以确保数据与实际个人资料相关联。

【讨论】:

  • 从安全的角度来看,这不是什么大问题,cookie是否被盗或其他什么都没有关系,对于所有真正重要的操作,都需要适当的身份验证。如果我要求用户在将商品添加到购物车之前通过 Facebook 登录,这将极大地损害转化率。还有为什么你认为通过 cookie 识别用户是不安全的? ASP.NET Identity 不也使用 cookie 吗?
  • asp.net 使用 cookie 来保持用户会话并避免在每次请求时都要求他登录,但肯定不会对用户进行身份验证
  • 但是我可以窃取会话cookie并通过这样做获得对系统和用户身份的访问权限。我的观点是,使用 cookie 来识别匿名用户可以像使用 cookie 来识别用户会话一样安全。
  • 是的,但这只会链接到用户浏览网站的浏览器,如果他或她试图从其他地方访问该网站,他们将被视为新用户
  • IIRC 除非您实现一些将会话 cookie 链接到浏览器的自定义机制,否则它不会那样工作。恐怕我可以窃取会话 cookie 并在另一个浏览器和另一个 IP 中使用它而不会出现问题。即使有这样的保护,同样的机制也可以用于匿名识别 cookie。
【解决方案2】:

ASP.NET 配置文件属性允许您的应用程序跟踪和永久存储用户特定的信息。例如,用户可以指定邮政编码或喜欢的配色方案,您的应用程序可以存储该信息并从应用程序的任何位置检索它。 ASP.NET 自动将当前用户(无论用户是匿名用户还是登录用户)与为其用户帐户存储的个人信息进行匹配。

配置配置文件属性

您将首先配置您的应用程序以启用配置文件属性。然后,您将定义要为每个用户跟踪的第一个属性。此属性名为 PostalCode,将同时针对匿名用户和登录用户进行跟踪。

来源:https://msdn.microsoft.com/en-us/library/taab950e.aspx

【讨论】:

  • 这似乎不再更新(对于较新版本的 .NET),并且在 ASP.NET 标识中的任何地方都没有提及这些内容。我认为所有这些都是 ASP.NET Identity 应该替换的旧成员相关库的一部分。我的目标是远离那些遗留库进行任何新的开发,因为微软似乎只会专注于支持 OWIN 基础设施之上的功能......
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
相关资源
最近更新 更多