在子域上获取经过身份验证的用户的用户名

时间:2011-03-21 21:54:53

标签: asp.net asp.net-membership forms-authentication subdomain

我在http://example.com上为ASP.NET 4.0应用程序设置了表单身份验证 - 我们将其称为MainApp。 我还有一个在http://static.example.com上运行的ASP.NET 4.0应用程序(让我们称之为SubApp)无法访问主应用程序。

现在,SubApp需要确定首次登录MainApp然后来到SubApp的用户的用户名。我认为这两个应用程序具有相同的机器密钥并且SubApp在web.config中指定就足够了,因此它可以读取MainApp的身份验证cookie并从中获取用户名。

我做了一个简单的测试,当我尝试在SubApp上点击某个页面时,它会一直重定向到http://static.example.com/login.aspx - 这在web.config中甚至没有指定。显然我的方法不起作用,虽然我不明白为什么 - 主域名的cookie应该可以在子域上访问,对吗?

这是我在SubApp中配置身份验证的方式:

<authentication mode="Forms">
    <forms domain="example.com"/>
</authentication>

<authorization>
    <allow users="*"/>
</authorization>

2 个答案:

答案 0 :(得分:3)

您可以尝试在web.config中为这两个应用程序设置domain标记的<forms>属性:

<authentication mode="Forms">
  <forms 
      loginUrl="~/Account/LogOn" 
      timeout="2880" 
      domain="example.com"
  />
</authentication>

这将有效地为example.comstatic.example.com设置身份验证Cookie的有效性,这意味着在第一个域上进行身份验证的用户将在第二个域中自动进行身份验证。

答案 1 :(得分:0)

达林很棒。

我有一个主域调用一个子域(带有window.open ...),两者上的表单身份验证...可以在我的开发机器上工作,在云中使用chrome但在云端不能使用IE10。

基本上它们都使用相同的数据库,因此将主域中存储在数据库中的guid传递给子域。然后从查询字符串验证 和FormsAuthentication.SetAuthCookie设置的标识(MyUserID.ToString)

我   - 尝试了服务器上的修补程序更新(感谢   - 添加了一个浏览器文件   - 设置cookieless =&#34; UseCookies&#34;在web.config中

但是直到我将域属性设置为它在IE10中工作的根域时才开始......对于一个小问题进行了4天的研究。

是的!!!!!