Asp.net 跨多个应用程序的表单身份验证

Asp.net 跨多个应用程序的表单身份验证,asp.net,iis,form-authentication,Asp.net,Iis,Form Authentication,我们正在尝试在PC上的两个应用程序(Windows 7、IIS 7.5)之间使用身份验证,一切正常。但问题是,当我们试图发布这些网站(Windows web server 2008,IIS 7.0)时,交叉身份验证不起作用 经过长时间的不可见性检查,我们发现第二个站点上的以下代码中出现了错误: Dim formsCookie As HttpCookie = Request.Cookies(FormsAuthentication.FormsCookieName) If (formsCook

我们正在尝试在PC上的两个应用程序(Windows 7、IIS 7.5)之间使用身份验证,一切正常。但问题是,当我们试图发布这些网站(Windows web server 2008,IIS 7.0)时,交叉身份验证不起作用

经过长时间的不可见性检查,我们发现第二个站点上的以下代码中出现了错误:

Dim formsCookie As HttpCookie = Request.Cookies(FormsAuthentication.FormsCookieName)
    If (formsCookie IsNot Nothing) Then
    Else
    ' always null
我们尝试在代码隐藏中检查如下路径:

 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>

请告诉我们本地PC和服务器中的IIS有什么区别


谢谢。

很可能浏览器没有将身份验证cookie从第一个站点发送到第二个站点。检查cookie路径和域。两个站点必须位于同一个域上,并且cookie路径必须设置为公共根

有关更多详细信息,请参阅此链接:

要帮助进行故障排除,请使用诸如Fiddler或Firebug之类的实用程序查看请求中发送的cookie,并验证站点1(用户登录的位置)设置的身份验证cookie是否也发送到站点2


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

它们都发布到同一个域吗?是的,在同一个域中,每个都在单独的子域中。例如:sub1.mydomain.com.jo,sub2.mydomain.com.joi是否有任何特定的配置?我已经编辑了我的帖子,并提到了一些与域和路径相关的代码。使用Fiddler或Firebug来验证cookie是否被发送。如果不是,请使用Fiddler/Firebug日志从第一个站点检查cookie上的实际cookie路径和域。如果正在发送,则服务器正在接收,但无法验证票证,因此请检查以确保承载站点的所有计算机上的machineKey设置配置相同。谢谢。我尝试使用firebug,似乎我发现了问题。我发现firebug网格中的域名没有显示.ASPXFORMSAUTH的域名,它只显示了第一个子域名。当我试图手动将其更改为我的域(.mydomain.com.jo)时,它工作正常。我在web.config文件中更改了它,但没有成功。如何在我的代码和配置文件中解决这个问题?第一个站点(您登录的站点)和第二个站点使用的域名是什么?两个web.configs中的表单身份验证条目是否相同?如果cookie没有被发送到第二个站点,听起来确实像是cookie作用域问题。您是否尝试过在域名的共享部分前加上句点?