跨子域的表单身份validation

当身份validation发生在子域而不是父域时,是否可以跨子域validation用户?

例如:

用户登录到site1.parent.com,然后我们需要将它们发送到reporting.parent.com。

即使在子域中发生登录,我是否可以对报告站点进行身份validation?

到目前为止,我所做的所有研究都让用户首先登录到父域,然后每个子域都可以访问身份validationcookie。

您可以在身份validation时将cookie设置为父域,但您必须明确设置它,它将默认为您所在的完整域。

将auth cookie正确设置为父域后,所有子域都应该能够读取它。

对用户进行身份validation时,请将身份validationcookie的域设置为二级域,即parent.com。 每个子域将根据请求接收父域的cookie,因此可以对每个子域进行身份validation,因为您将使用共享身份validationcookie。

validation码:

System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False); authcookie.Domain = "parent.com"; HttpResponse.AppendCookie(authcookie); HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName, False)); 

作为旁注,我发现使用jro的方法运行良好+1后,FormsAuthenication.SignOut()方法在从www /以外的子域调用时不起作用。 (我猜是因为.Domain属性不匹配) – 为了解决这个问题,我使用了:

 if (Request.Cookies[FormsAuthentication.FormsCookieName] != null) { HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName); myCookie.Domain = "parent.com"; myCookie.Expires = DateTime.Now.AddDays(-1d); Response.Cookies.Add(myCookie); } 

除了将cookie设置为父域之外,还需要确保所有站点(apps)具有相同的validationKey和decryptionKey(),以便它们都能识别彼此的身份validation票证和cookie。 相当不错的文章http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

是的,当然。 您可能需要在某些阶段滚动自己,但它应该是可行的。

一个想法是:当您将它们重定向到边界时,给它们一次性通过令牌,然后告诉接收子域期望它们(此用户,来自此IP,使用此令牌)。

Jro的答案很好。 但请确保更新webconfig表单身份validationsetting "domain" ,否则表单身份validation注销将无法正常工作。 这是我遇到的退出问题。 这里的伎俩是’。’ 作为域的前缀为cookie设置为“.parent.com”(使用cookie检查器)。

    

要做的2件事:

  1. 所有web.config中的MachineKey应该相同(主域和子域)
  2. AuthenticationCookie域名应该相同。

请按照以下文章进行更深入的介绍。