7

我正在使用 SimpleMembership 开发一个 ASP.NET MVC4 项目,它会在您登录时生成一个 ASPXAUTH cookie。它似乎工作得很好,但是今天我打开了另一个 MVC4 项目,只是注意到我已经登录了在。

这非常奇怪,因为新项目实际上没有在数据库中定义任何用户。更令人不安的是,当我在新项目上点击“注销”时,它使我退出了原始站点。

两个站点都在不同的端口上运行,尽管都在本地主机上。在检查请求以查看为什么它返回“IsAuthenticated == true”时,我注意到 ASPXAUTH cookie 被发送到两个站点,并且调试器中 cookie 的“域”参数为“null”。这让我觉得也许 cookie 是作为“无域”cookie 生成的(老实说,我不知道这样的事情是否可能发生!),并查看了 web.config 设置以指定域:

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" domain="http://localhost:56626" />
</authentication>

不幸的是,设置“域”参数使 cookie 停止工作。我已经尝试了所有排列方式(使用 http、不使用 http、使用端口、不使用端口等),每次我指定域时,浏览器都会收到具有正确指定域名的 cookie(我在 Chrome 开发人员工具中检查了它),但随后无法将其发送回后续请求的服务器。

所以,我对这里发生的事情感到很困惑。这是由于我在某处未正确设置而导致的安全漏洞吗?或者,ASPXAUTH cookie 会在同一个域的两个不同端口上授权用户使用两个完全不同的 Web 应用程序,这是完全正常的行为吗?我会在网络主机上对此进行测试,但不幸的是,我目前无权访问任何运行 MVC4 的程序。

提前致谢。

4

2 回答 2

5

ASPXAUTH 是 cookie 的默认名称,但通过更改 Web.Config 中每个项目的此名称,您可以使其仅应用于该项目。

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" domain="http://localhost:56626"  name=".PROJ1AUTH"/>
</authentication>
于 2013-01-22T14:03:44.157 回答
3

Name属性添加到 forms 元素。它将以您提供的名称命名 authcookie,使其在其他项目中独一无二。

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" name="A_UNIQUE_NAME" />
</authentication>
于 2013-02-06T19:59:13.300 回答