【问题标题】:Share authentication cookie/membership provider between two sites - second site never authenticates在两个站点之间共享身份验证 cookie/成员资格提供程序 - 第二个站点从不进行身份验证
【发布时间】:2012-06-15 08:15:17
【问题描述】:

我在 Win2008R2 IIS7 上有两个 ASP.NET 4.0 站点,例如demo1.site.domain.com 和 demo2.site.domain.com,我想要单点登录。我已经四处搜索并配置了两个站点的 web.config 像这样

<machineKey validationKey="ABCDEFG" decryptionKey="HIJKLMN" validation="SHA1" />

<roleManager defaultProvider="RoleName">
  <providers>
    <add name="RoleName" type="Assembly.RoleProvider, Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a1b2c3d4e5f6g7h8i9" />
  </providers>
</roleManager>

<membership defaultProvider="MembershipName">
  <providers>
    <add name="MembershipName" type="Assembly.MembershipProvider, Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a1b2c3d4e5f6g7h8i9" />
  </providers>
</membership>
<authentication mode="Forms">
  <forms 
    loginUrl="http://demo1.site.domain.com/login.aspx" 
    name=".ASPXAUTH"
    domain="domain.com"
    protection="All"  
    path="/"        
  />
</authentication>

<authorization>
  <deny users="?" />
</authorization>

换句话说,两个网站上的机器密钥是相同的,并且成员资格/角色提供者存在于第一个站点的集合中并由第二个站点使用。

我遇到的问题是它不起作用。我使用 fiddler 来查看发生了什么,并且 auth cookie 永远不会发送到第二个站点,因此它总是重定向到登录页面。

我是否遗漏了一些明显的东西?

谢谢, 尼克

【问题讨论】:

  • 第二个站点和第一个站点在同一个域下吗?如果没有,则不会发送 cookie。
  • 我已经编辑了域。它们都在同一个域下(我故意更改了实际名称)。它们在同一台服务器上,它们的绑定是 demo1.site.domain.com demo2.site.domain.com

标签: asp.net single-sign-on


【解决方案1】:

我认为您在身份验证配置中设置了错误的域 - 它应该是“domain.com”(这可能是一个错字,但值得检查)。

您可能想查看以下关于跨子域共享 cookie 的博客:

http://www.codeguru.com/csharp/csharp/cs_internet/article.php/c19417/Sharing-Cookies-Across-Domains.htm

【讨论】:

  • 这是一个错字,我已经编辑了帖子以显示它的真实情况。
  • 通过阅读上面的链接,我认为这可能是您缺少的部分“注意域名前的句点,这非常重要。RFC 2109 指定 cookie 上的域设置必须有两个句点。”所以应该是 .domain.com
  • 是的,域之前的额外点已修复它。谢谢你们,很抱歉我不能投票,因为我是该网站的新手,但你们帮了很多忙。
猜你喜欢
  • 2011-11-23
  • 2016-07-27
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 2011-10-10
  • 2010-12-07
  • 1970-01-01
相关资源
最近更新 更多