带有跨域iFrame的ASP.NET WebForms FormsAuthentication问题

问题描述 投票:0回答:1

[嗯,我有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,因为我以前调用过

FormsAuthentication.SetAuthCookie(user.Login,True)

] >>这里是问题:由于我在Windows服务器计算机上(托管网站)安装了以下两个KB:

    https://support.microsoft.com/en-us/help/4534978/kb4534978
  1. https://support.microsoft.com/en-us/help/4535104/kb4535104
  2. 重定向到“ documents.aspx”页面时,尽管我之前调用FormsAuthentication.SetAuthCookie,但
  3. Request.IsAuthenticated仍然是

    false

”,并且不会引发异常!我的用户不再登录。
我卸载了两个KB,并且该问题不再发生,因此,我确定这两个KB之一中的某件事导致了我的问题。

[真正奇怪的是,当我尝试在localhost重现该问题时,我根本没有遇到问题->仅当网站A和网站B没有相同的域名时,才出现此问题。我对此假设进行了多次检验,这似乎是真的。

因此,该框架(或我的使用方式)出了问题,因此,FormsAuthentication无法正常工作。以及在托管该网站的Windows服务器计算机上安装了这两个KB时。

这很愚蠢,调试时找不到问题。

请注意,在两种情况下,无论身份验证是否有效,我的身份验证cookie都成功创建...

有人会对那里发生的事情有任何想法吗?如果我的问题不清楚,请随时提出任何问题。

问候

嗯,我有2个ASP.NET WebForm网站,它们在同一Windows服务器计算机上的生产环境中运行,我们将它们称为站点A和站点B。在站点A中有一些页面,其中有一个iFrame,...] >

asp.net iframe webforms forms-authentication windows-server-2012-r2
1个回答
0
投票
[自2019年以来,Microsoft发布了KB,这些KB更改了Cookie的“ SameSite”属性的默认值。以前,在使用FormsAuthentication.SetAuthCookie创建auth cookie时,未指定SameSite属性,在大多数浏览器中,该属性的默认值为“ none”,并且工作正常。 (自2020年2月开始,Chrome不再是这种情况,默认值变为“松弛”。)
© www.soinside.com 2019 - 2024. All rights reserved.