【问题标题】:HttpContext.Current.User.Identity.Name Returns wrong user nameHttpContext.Current.User.Identity.Name 返回错误的用户名
【发布时间】:2014-01-18 18:49:37
【问题描述】:

这是一个普通的 ASP.NET 应用程序,使用 SQL Membership Provider 进行身份验证。虽然应用程序大部分时间运行良好。我们最近看到用户抱怨说他们正在查看其他用户的帐户。

我很确定并再次确认我直接在代码中使用 HttpContext.Current.User.Identity.Name 来获取用户信息。因此,在繁重的负载下,我会返回不同的用户名。

有没有人遇到过类似的问题?有可能的原因吗?

应用程序在 ASP.NET 4.0 中运行,Web 窗体,没有缓存,没有在代码中处理任何 cookie,没有嗅探 cookie 的 Javascript。

我看到这两个链接的链接大致相同,但没有发布答案。

http://bytes.com/topic/asp-net/answers/324385-serious-issue-httpcontext-current-user-identity-name

http://www.experts-exchange.com/Web_Development/Miscellaneous/Q_21105924.html

【问题讨论】:

  • 请多描述一下您的应用程序。您是否使用任何自定义缓存(因此可能会在缓存中捕获一个用户的数据或 .ASPXAUTH 响应 cookie 并将其提供给后续访问者)?如果您在服务器上运行 Windows 更新,是否表明您已完全修补?什么版本的 ASP.NET?等等..
  • 更新了答案,我会检查服务器中的更新。
  • 您解决了吗?如果有,怎么做?
  • 你好,我也有同样的问题,你找到解决办法了吗?

标签: asp.net httpcontext


【解决方案1】:

Forms Authentication 不应该与 Membership provider 有太多的关系。

FormsAuthentication 将已签名的用户信息保存到 .ASPXAUTH cookie 中。当下一个请求到达服务器时,它会解密 cookie 值并将其设置回HttpContext.Current.User.Identity.Name。它使用 MachineKey 进行加密\解密。然后它基于包含用户名的FormsAuthenticationTicket 对象创建 FormsIdentity 对象。因此,您的用户名存储在客户端上。并且整个过程不包括会员资格提供者的使用。

Forms Authentication 仅在您为用户登录时使用 Membership,然后基于登录的用户 FormsAuthentication 创建一个带有 UserName 的 cookie。

关于您的问题,您需要检查.ASPXAUTH cookie 值是否存在用户名无效的请求。您可以尝试记录这些错误请求的 cookie 信息,然后您可以解密它们以从请求中获取用户名信息。或者,如果您可以在本地重现它,您可以禁用表单 cookie 加密 (protection element),然后检查它的值是否存在错误请求

【讨论】:

  • 我不明白,它怎么会返回一个随机人的电子邮件 ID?我正在尝试重现此问题,但还没有运气。我知道这发生在极少数情况下,我看到用户向我发送一个不属于他们且没有任何关系的帐户的屏幕截图?。
  • 它不应该是随机的。您需要检查这些请求的 cookie 值,也许您的应用程序中的某些 JavaScript 会覆盖\删除 cookie 值,然后 Asp.Net 只使用空的 UserName,因为它没有 cookie。
  • 如何检查这些请求的 cookie 值?有记录选项吗?我知道这很奇怪,但是没有其他 Javascript 正在处理 cookie。这是一个小应用程序,我跑过它。我确保自己在所有地方都使用 HttpContext.Current.User.Identity.Name。
  • 您可以从 HttpContext.Current.Request.Cookies[".ASPXAUTH"] 获取它们。如果您可以在本地重现它,您还可以使用 Asp.Net Trace 机制 - msdn.microsoft.com/en-us/library/y13fw6we(v=vs.85).aspx 。它将记录本地请求,您可以在 trace.axd 页面上看到它们
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
相关资源
最近更新 更多