HttpContext.Current.User 对于无状态会话是否安全



我已经使用 Azure 网站几个月了,出于 SSL 原因,我决定迁移到云服务。由于我的项目中可能需要几个 Web 角色,因此我的会话管理需要是无状态的。

这就是我在项目中处理用户数据的方式。如果我需要用户相关数据,我会通过HttpContext.Current.User.Identity.Name获取他们的用户名。使用此信息,我查询我的数据库以获取有关我的用户的信息。

这是正确的做法吗?我做了一些研究,但找不到关于HttpContext.Current.User来自哪里的真正清晰的信息。

到目前为止,这是我的理解。用户使用表单身份验证进行身份验证,该身份验证在用户PC中创建cookie。当用户再次请求服务器时,服务器会检查cookie信息并使用它来填充HttpContext对象。如果其他 Web 角色之一下次接受请求,它是否可以使用该 cookie 来填充 HttpContext?(这可能都是错误的,正如我所说,这是我从网络上的文档和其他答案中了解到的)

这就是我试图基本理解的。我希望我把我的问题解释得足够清楚。如果不清楚,请告诉我。

我认为你的理解是正确的。当我们使用表单身份验证时,登录后会生成一个cookie,其中用户信息和令牌之类的东西被加密。然后我们请求另一个页面,浏览器会将这个cookie发送到服务器,ASP.NET 将解密cookie,验证并将用户信息填写到HttpContext.Current.User中,无论您的服务器端有多少个实例。所以我认为在具有多实例的Web角色中使用HttpContext.Current.User是安全的。

我正在多个 Web 角色上运行的 Azure 应用程序中使用 HttpContext.Current.User.Identity,禁用了 SessionState,没有任何问题。我已将其设置为使用饼干。

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogIn" cookieless="UseCookies" timeout="2880" />
</authentication>

最新更新