Simplemembership ASPXAUTH cookie 在两个单独的 Web 项目上进行验证

Posted

技术标签:

【中文标题】Simplemembership ASPXAUTH cookie 在两个单独的 Web 项目上进行验证【英文标题】:Simplemembership ASPXAUTH cookie validating on two separate web projects 【发布时间】:2012-12-16 12:01:07 【问题描述】:

我正在使用 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 的设备。

提前致谢。

【问题讨论】:

查看这里***.com/questions/1612177/… 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" name="A_UNIQUE_NAME" />
</authentication>

【讨论】:

有效!如果您同时打开 2 个项目,这很有用。

以上是关于Simplemembership ASPXAUTH cookie 在两个单独的 Web 项目上进行验证的主要内容,如果未能解决你的问题,请参考以下文章

什么是 ASPXAUTH cookie?

ASPXAUTH cookie 未保存

使用 protection=validation 解密 .ASPXAUTH Cookie

WebAPI + SimpleMembership + WebSecurity - 永远无法进行身份验证?

在 MVC4 RTM 中从 ASP.NET 成员身份迁移到 SimpleMembership

实体框架代码优先问题(SimpleMembership UserProfile 表)