[嗯,我有2个ASP.NET WebForm网站,它们在同一Windows服务器计算机上的生产环境中运行,我们将它们称为网站A和网站B。网站A中的某些页面中有一个iFrame,指向网站B 。我希望我的用户在通过站点A(通过iFrame)浏览站点B时在站点B上进行身份验证。为了做到这一点,我的网站A上iFrame的来源是这样的:
B.com/index.aspx?guid={aGuid}&pageIWant={pageIWant}
所以,我不会在那儿详细介绍,因为它可以工作,这不是问题,但是基本上它的工作方式是在站点B的index.aspx.vb的Page_Load中,我得到了向导在代表用户的查询字符串中,我从数据库中获取该用户,使用表单身份验证记录该用户,然后将用户重定向到另一个querystrings参数“ pageIWant”。所以,这基本上是我在page_load中所做的:
/*Get the guid*/
Dim user = /*get user from guid*/
/*some checks*/
FormsAuthentication.SetAuthCookie(user.Login, True)
Select Case Request.QueryString("pageIWant")
Case "1"
Response.Redirect("documents.aspx")
Case "2"
/*etc*/
End Select
站点B的index.aspx页面不需要身份验证,但是页面“ documents.aspx”则需要身份验证。希望我确实在index.aspx的页面加载中对我的用户进行身份验证,因此我通过了[[Global.asax.vb中的Application_AuthenticateRequest,一切都很好,我的用户可以访问该页面。这是我的Application_AuthenticateRequest方法中的代码:
Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
If Request.IsAuthenticated Then
If Request.Cookies("ESERVICES_LOGIN") IsNot Nothing Then
Dim aTicket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(Request.Cookies("ESERVICES_LOGIN").Value)
HttpContext.Current.User = New GenericPrincipal(New GenericIdentity(aTicket.Name), aTicket.UserData.Split(","c))
Else
FormsAuthentication.SignOut()
HttpContext.Current.User = New GenericPrincipal(New GenericIdentity(String.Empty, String.Empty), New String() {})
Response.Clear()
End If
End If
End Sub
在这种情况下,当我重定向到页面“ documents.aspx”时,Request.IsAuthenticated设置为true,因为我以前调用过] >>这里是问题:由于我在Windows服务器计算机上(托管网站)安装了以下两个KB:FormsAuthentication.SetAuthCookie(user.Login,True)
false
[真正奇怪的是,当我尝试在localhost重现该问题时,我根本没有遇到问题->仅当网站A和网站B没有相同的域名时,才出现此问题。我对此假设进行了多次检验,这似乎是真的。
因此,该框架(或我的使用方式)出了问题,因此,FormsAuthentication无法正常工作。以及在托管该网站的Windows服务器计算机上安装了这两个KB时。
这很愚蠢,调试时找不到问题。请注意,在两种情况下,无论身份验证是否有效,我的身份验证cookie都成功创建...
有人会对那里发生的事情有任何想法吗?如果我的问题不清楚,请随时提出任何问题。问候
嗯,我有2个ASP.NET WebForm网站,它们在同一Windows服务器计算机上的生产环境中运行,我们将它们称为站点A和站点B。在站点A中有一些页面,其中有一个iFrame,...] >