尽管测试成功,但表单身份验证仍失败

时间:2020-03-04 15:37:32

标签: vb.net forms-authentication iis-8

我的任务是将.NET 3.5应用程序从我们的一些旧服务器移到IIS 8.5级服务器上的新位置,并且毫不奇怪,其中一些根本不会运行。

为减轻这种情况,我将所有文件导入到一个新项目中,并遍历所有错误,警告和消息,以解决问题。

应用程序现在启动,但是登录过程(使用FormsAuthentication.RedirectFromLoginPage(UserName.Text, True)的典型.NET登录过程根本不起作用;它不会对用户进行身份验证。

web.config 文件在authorization部分中具有以下条目:

<anonymousIdentification enabled="false" />
...
<httpModules>
    <add name="ScriptModule" 
        type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, 
        PublicKeyToken=31BF3856AD364E35"/>
    <add name="FormsAuthentication" 
        type="System.Web.Security.FormsAuthenticationModule" />
</httpModules>
...
<authentication mode="Forms">
    <forms loginUrl="Default.aspx" 
        defaultUrl="default.aspx" 
        slidingExpiration="true" 
        timeout="20" 
        name="FORMSAUTHCOOKIE" 
        protection="All" />
</authentication>
...
<authorization>
    <allow users="*"/>
    <deny users="?"/>
</authorization>

我用一些虚拟变量修改了后面的代码,以供手表监视...

 1    If row.ItemArray.Length <> 0 And Not row("Suspended") Then
 2        Session("isadmin") = row("Administrator")
 3        Session("email") = row("Email")
 4        Session("welcome") = row("Forename") & " " & row("Surname") & "  (" & row("Department") & "), logged in"
 5        uAdapter.UpdateLastLogin(row("UserName"), row("Password"))
 6        FormsAuthentication.RedirectFromLoginPage(UserName.Text, True)
 7        Dim y As Boolean = Request.IsAuthenticated
 8        Dim x As HttpCookieCollection = Request.Cookies
 9        Dim z As HttpCookie = Request.Cookies.Item("FORMSAUTHCOOKIE")
10        Dim a As Int32 = -1
11    Else
12        Msg.Text = "Invalid login details. Please try again."
13    End If

第7行到第10行用于测试和读取代码中不存在的其他值。尽管FormsAuthentication.RedirectFromLoginPage(UserName.Text, True)的执行没有错误,但即使有其他地方的引用,它也不会重定向到当前页面以外的任何其他页面。另外,执行的第7行的结果为 False

没有错误消息。正在从连接返回数据。两种版本的系统在格式上存在差异,但是我将其归结为IIS上的呈现。

有人能发现什么明显的原因为什么不起作用?我在某处错过了什么吗?

其他详细信息

下面是David的答案,我已经使用直接的ReturnUrl进行了测试,并逐步完成了代码... Debug screenshot

2 个答案:

答案 0 :(得分:0)

从MSDN文档(link)的“备注”部分:

默认情况下,ReturnUrl变量必须引用 当前的应用程序。如果ReturnUrl引用了其他页面 应用程序或其他服务器上的RedirectFromLoginPage 方法将重定向到DefaultUrl属性中的URL。如果你想 要允许重定向到当前应用程序之外的页面,您必须 使用以下命令将EnableCrossAppRedirects属性设置为true 表单配置元素的enableCrossAppRedirects属性。

这是我的猜测:

  • 在查询字符串中未定义ReturnUrl。
  • ReturnUrl指向旧服务器上的页面。

很有可能是后者。

答案 1 :(得分:0)