0

我们正在尝试在我们 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有什么区别。

谢谢。

4

1 回答 1

2

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

有关更多详细信息,请参阅此链接: Cookie 域和路径

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

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

于 2013-02-21T06:09:32.743 回答