跨多个应用程序进行身份验证

问题描述:

我们试图在我们的PC(Windows 7,IIS 7.5)上的两个应用程序之间使用身份验证,并且一切都很顺利。但问题是,当我们尝试发布这些网站(Windows Web服务器2008年,IIS 7.0)交叉认证不起作用!跨多个应用程序进行身份验证

长invistigation后,我们发现,在下面的代码是第二个站点上发生的错误:

Dim formsCookie As HttpCookie = Request.Cookies(FormsAuthentication.FormsCookieName) 
    If (formsCookie IsNot Nothing) Then 
    Else 
    ' always null 

我们试图检查pathes这样在后面的代码:

Dim ticket As New FormsAuthenticationTicket(1, smsProfile, DateTime.Now, _ 
                 DateTime.Now.AddDays(1), True, AdminSessions.UserObj.Pid, _ 
                 FormsAuthentication.FormsCookiePath) 
    Dim hash As String = FormsAuthentication.Encrypt(ticket) 
    Dim cookie As New HttpCookie(
     FormsAuthentication.FormsCookieName, 
     hash) 
    If (ticket.IsPersistent) Then 
     cookie.Expires = ticket.Expiration 
    End If 
    Response.Cookies.Add(cookie) 
    Response.Redirect(smsPortal) 

在web.config中:

 <authentication mode="Forms"> 

     <forms name=".ASPXFORMSAUTH" enableCrossAppRedirects="true" domain="mydomain.com.jo" loginUrl="http://..." protection="All" path="/"/> 

    </authentication> 

请告诉我们IIS之间有什么区别本地PC和服务器。

谢谢。

+0

它们是否都发布到同一个域? – 2013-02-21 06:03:43

+0

是在同一个域中,每个域都在独立子域中。 ex:sub1.mydomain.com.jo,sub2.mydomain.com.jo – Ibsuser 2013-02-21 06:08:47

+0

有没有特别的配置? – Ibsuser 2013-02-21 08:24:46

浏览器很可能不会将认证cookie从第一个站点发送到第二个站点。检查cookie路径和域。这两个网站必须位于同一个域中,并且Cookie路径必须设置为公共根。

请参阅此链接了解详情: Cookie Domains and Paths

为了帮助排除故障,使用这样的实用程序,提琴手或萤火虫查看请求被发送的cookie,并确认身份验证Cookie通过网站1套(用户登录的地方)也被发送到站点2.

如果站点不在同一台服务器上,请检查它们是否使用相同的machineKey配置。

+0

我edidt我的帖子,并提到了一些与域和路径相关的代码。 – Ibsuser 2013-02-21 06:16:21

+0

使用Fiddler或Firebug验证是否正在发送Cookie。如果不是,请使用Fiddler/Firebug日志检查第一个站点上cookie的实际cookie路径和域。如果它正在发送,服务器正在接收它,但无法验证票证,因此请检查以确保托管站点的所有计算机上的machineKey设置都配置相同。 – Maxam 2013-02-21 06:22:42

+0

谢谢。我试图用萤火虫,似乎我发现了这个问题。我发现萤火虫网格中的显示没有向我展示我的.ASPXFORMSAUTH域名,它只显示他第一个子域名。当我试图手动将其更改为我的域名(.mydomain.com.jo)时,它工作正常。我在web.config文件中更改了它,但是没有成功。我如何在我的代码和配置文件中解决这个问题? – Ibsuser 2013-02-21 07:43:37