【问题标题】:.Net cookies for subdomains.Net 子域 cookie
【发布时间】:2012-10-03 04:49:45
【问题描述】:

我正在尝试在两个子域上登录用户。

考虑这些子域:

forum.mydomain.com、account_a.mydomain.com、account_b.mydomain.com。

用户登录到 account_a.mydomain.com。在我的身份验证功能中,我想为 forum.mydomain.com 创建一个身份验证 cookie。 (但不是(!)对于 account_b.mydomain.com)

我尝试创建一个 cookie 并将 .domain 属性设置为 forum.mydomain.com 但不知何故 cookie 没有创建。将 .domain 属性设置为 .mydomain.com 不是我想要的,因为它会产生安全问题,因为 account_a 和 account_b 是两个完全不同的用户。

我怎样才能让它工作?

【问题讨论】:

    标签: asp.net .net cookies


    【解决方案1】:

    唯一可以创建特定域 cookie 的是一台可以解析您正在创建的域的机器。如果您想创建一个名为 account_a.mydomain.com 的 cookie,则必须从该特定域访问您的服务器的 url。鉴于此,account_a.mydomain.com 不可能创建特定于forum.mydomain.com 的 cookie,因为它们是完全独立的地址。任何创建此类 cookie 的尝试实际上都会为 account_a.forum.mydomain.com 创建一个 cookie。

    至于如何让它工作,你还没有真正说明为什么你首先要以这种方式修补 cookie,所以这很难说。每个浏览器只能为用户拥有一个有效的身份验证 cookie,并且这些 cookie 对浏览器的所有实例都是通用的,因此实际上不可能让 account_a 的 cookie 验证 account_b,而这两个 cookie 不能无论如何都住在同一台机器上。域级身份验证的目的之一是防止这种同时多重性。

    编辑: (回复评论)

    在您希望用户能够穿越到多个域服务器的场景中,您不需要接触 cookie 本身。它会自动将自己绑定到mydomain.com 域并允许这样的遍历。尝试在全局对象上应用单独的系统级安全机制只是有点倒退。打个比方,你不会用带刺铁丝网围住你房子周围的栅栏,以防止有人进入你的地下室。需要在该服务器级别应用防止account_a 访问account_b 域的身份验证控制。我的猜测是您有某种形式的通用代码,其中域针对身份验证进行了合理化,因此您真正需要做的是处理实际授权。

    一种方法是向 Page 基类的 Init 或 Load 事件添加一些自定义代码。此外,您可以在 global.asax 中的 BeginRequest 事件中添加一段逻辑。我见过使用的一种技术(尽管我自己从未使用过)是添加到 global.asax 中的 AuthorizeRequest 事件。我找不到任何描述该主题的文档,但我确实找到了一个显示它是如何完成的示例的文档。 https://nport.svn.codeplex.com/svn/jacky/ccs/CCWeb/Global.asax.cs

    【讨论】:

    • 当来自 account_a 或 account_b 的用户登录并想要访问论坛时,我不希望他必须再次登录。它们是我服务器上的两个不同的 .net 应用程序。
    • @Jeroen:我的回复太多了,无法发表评论。我会更新我的答案。
    • 我明白了。我必须将 cookie 绑定到 .mydomain.com。但是这样我一次只能登录一个帐户。我的一些用户可以同时登录多个帐户。我可以通过使用 cookie 的帐户特定名称来解决这个问题?
    • 您不应该让一个用户同时登录多个帐户。它违背了身份验证的目的。如果您需要单个用户访问多个资源,您应该使用角色来授予访问权限。
    【解决方案2】:

    您无法仅通过 cookie 设置来解决此问题,域​​属性的目的是防止这种情况发生。

    如果 forum.mydomain.com 和 account_a.mydomain.com 绝对需要使用相同的身份验证 cookie,您需要将其设置为 .mydomain.com 并有一些逻辑确保它在 account_b.mydomain.com 中无效

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 2018-08-11
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2011-01-11
      • 2012-11-07
      相关资源
      最近更新 更多