【问题标题】:.NET forms authentication doesn't work.NET 表单身份验证不起作用
【发布时间】:2011-03-20 03:26:07
【问题描述】:

我的 .NET 应用程序有问题,它有时只能在客户端的位置上重现,这使得解决起来非常困难。在应用程序中使用表单身份验证。有一个登录页面,每个匿名用户都被重定向到该页面。用户输入用户名和密码后,它会重定向到 DefaultURL 或一些预定义的页面。问题是有时当用户输入正确的用户名和密码时,它不会登录,而是刷新登录页面而没有任何错误消息。用户多次输入用户名和密码后,即可登录系统。

查看我的登录页面提交_点击下面的代码:

    Dim userName As String = tbUsername.Text
    Dim password As String = tbPassword.Text
    Dim returnUrl As String = Request("returnUrl")

    If IsValidated() Then
        FormsAuth.SignIn(userName, False)

        If password = WebConfigurationManager.AppSettings("PasswordDefault") Then
            FlashMessage.ErrorMessage("You have default password """ & password & """. Please change it")
            Response.Redirect("~/ChangePassword.aspx")
        End If
        If Not String.IsNullOrEmpty(returnUrl) Then
            Response.Redirect(returnUrl)
        Else
            If Roles.IsUserInRole(userName, Constants.SOME_ROLE) Then
                Response.Redirect("~/Forms/SomePage.aspx")
            Else
                Response.Redirect("~/Default.aspx")
            End If
        End If
    Else

    End If

更新:
我检查了 windows 事件查看器,它有以下事件:

事件类型:信息
事件来源:ASP.NET 2.0.50727.0
活动类别:网络活动
事件 ID:1315
日期:2010 年 4 月 29 日
时间:上午 11:55:56
用户:不适用
电脑:TWDWEB1
说明:
事件代码:4006
事件消息:成员身份验证失败。
活动时间:4/29/2010 11:55:56 AM
活动时间 (UTC):2010 年 4 月 29 日下午 3:55:56
事件 ID:9e5aea5a6d6b4f7a96fc38a334d181dd
事件顺序:26
事件发生:4
事件详情代码:0

申请信息:
应用域:/LM/W3SVC/1/Root/DataManipulationsService-1-129170192766483624
信任级别:完全
应用程序虚拟路径:/DataManipulationsService
应用路径:F:\Development\DataManipulationsService\
机器名称:TWDWEB1

工艺信息:
进程 ID:7948
进程名称:w3wp.exe
帐号名称:NT AUTHORITY\NETWORK SERVICE

请求信息:
请求网址:
请求路径:
用户主机地址:
用户:
已通过身份验证:False
身份验证类型:
线程账户名:NT AUTHORITY\NETWORK SERVICE

要验证的名称:xxxxxx

自定义事件详情:

有关详细信息,请参阅http://go.microsoft.com/fwlink/events.asp 的帮助和支持中心。

【问题讨论】:

    标签: .net vb.net webforms forms-authentication


    【解决方案1】:

    “客户位置”是什么意思。您的意思是从客户端的机器上登录(与您从其他任何地方登录到同一个 Web 服务器)还是您的意思是他们拥有自己的网站副本?

    在不知道该问题的答案的情况下,我建议的第一件事是,如果您从网络场运行,则需要确保 web.config 文件中的 machineKey 元素已设置且相同在网络场中的每台服务器上。

    【讨论】:

    • “客户端位置”是指发出请求的机器(实际上是几台机器)。服务器是相同的,这意味着当我试图从我的机器上复制它时,我使用与客户端使用相同的服务器。我不使用网络场,只使用一个运行应用程序的 IIS 实例。这是否为您提供了有关可能发生的情况的任何线索?谢谢。
    • 您可以使用 Fiddler 之类的东西来查看请求/响应,以了解您的机器与出现问题的机器之间有什么不同。
    【解决方案2】:

    在 signin() 调用周围添加一个 try/catch 块。如果由于客户端系统上的某些错误配置导致该调用失败,您可以将错误暴露给用户或记录。也许代码是否在执行任何可能隐藏错误的异常处理?

    【讨论】:

    • 问题是它只是偶尔发生。我认为如果配置错误,每次都应该出错。问题是有时它允许登录,有时用户无法登录,但输入用户名和密码多次后登录。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2023-03-22
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多