在网站上共享的表单身份验证

时间:2014-11-23 20:24:40

标签: asp.net asp.net-mvc webforms forms-authentication

我正在为现有网站开发一个仅限移动设备的子域名网站。 (主要网站是www.domain.com,我正在开发的仅限移动网站是m.domain.com。)

当用户登录主网站时,我想将其重定向到仅限移动设备的网站:

  1. 他们似乎是在移动设备上
  2. 他们有特殊的角色
  3. 重定向时,他们不必再次登录。所以我想在各个网站上共享身份验证。主网站使用表单身份验证。

    我正在尝试按照文章Forms Authentication Across Applications中描述的步骤进行操作。主要的是,您必须“将 Web.config 文件的表单和machineKey部分的属性设置为参与共享表单身份验证的所有应用程序的相同值。”< / p>

    我做到了这一点。但是,它仍然无法正常工作。我可以使用相同的凭据登录或退出任一站点。但登录或退出一个站点对另一个站点的登录状态没有任何影响。

    文章有这样的说明:

      

    如果在每个ASP.NET 2.0版(或更高版本)应用程序的machineKey元素中包含decryption =“3DES”,则运行ASP.NET 2.0或更高版本的应用程序可以与早期版本的ASP.NET共享表单身份验证票证信息

    这似乎不适用。

    另外,我没有指定domain元素的authentication属性。它表示它是可选的,默认值为“”。

    任何人都可以提出我可能会尝试的其他建议。我只是不知道从哪里开始。

2 个答案:

答案 0 :(得分:3)

这是错的。

  

另外,我没有指定身份验证的域属性   元件。它说它是可选的,默认值为&#34;&#34;。

你应该像这样在forms元素中设置domain属性(不确定指示子域的点)。

<forms domain=".mydomain.com" loginUrl="member_login.aspx" cookieless="UseCookies" />

通过使用forms配置元素的domain属性,在ASP.NET应用程序的配置文件中设置CookieDomain属性值。 CookieDomain属性值确定cookie将用于的域。

链接中的文档说明了

  

如果只有,您可以省略forms标签的domain属性   服务器上的一个网站。

在你的情况下,它不是。

答案 1 :(得分:2)

由于您只想在同一个域内共享,因此这不应该是一个问题。只有当您要处理多个服务器或域时,机器密钥才有意义。

在您的情况下,它是同一服务器上的同一个域,因此如果您将域(httpcookie中有一个属性)设置为&#34; domain.com&#34; (您不应该在您的身份验证cookie中提及任何子域名),我记得这可以在web.config(表单身份验证部分)本身中完成,这应该适合您。

<authentication mode="Forms"> <forms loginUrl="~/account/login" timeout="30" name=".FormAuth" cookieless="UseCookies" enableCrossAppRedirects="true" domain=".domain.com" /> </authentication> 

或者如果你手动创建cookie,你可以创建一个类似的,

var cookie = new HttpCookie(); cookie.Domain = ".domain.com";

这篇好文章解释了相同的内容,我后来发现......

Asp.net forms authentication and multiple domains