【问题标题】:asp.net authorization problem authorizes everyoneasp.net授权问题 授权大家
【发布时间】:2011-07-12 15:37:07
【问题描述】:

所以我得到了 2 个 .aspx 文件。一种称为登录,一种称为默认。这个想法是,当您启动应用程序时,您将被踢到登录屏幕。我正在使用 default.aspx.vb 文件中的以下代码执行此操作:

Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

        If (HttpContext.Current.User.Identity.IsAuthenticated = False) Then

            Response.Redirect("Login.aspx")


        End If

    End Sub

问题是您总是出于某种原因获得身份验证。它总是返回 true。 我的网络配置文件如下所示:

<configuration>
  <appSettings>
    <add key="strConn" value="EDITED"/>

  </appSettings>
  <location path="~/Styles">
    <system.web>




  <customErrors mode ="Off">

  </customErrors>

  <authentication mode="Forms">
    <forms name=".ASPXAUTH"
           loginUrl="Login.aspx"
           protection="All"
           timeout="30"
           path="/">
    </forms>
  </authentication>

  <authorization>

    <deny users="?" />
    <allow users="*" />

  </authorization>
  <compilation debug="true" strict="false" explicit="true" targetFramework="4.0">
    <assemblies>
      <add assembly="Microsoft.Data.Odbc, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
      <add assembly="system.web.security"/>

    </assemblies>
  </compilation>



 </system.web>
  </location>
</configuration>

我也试过了,没有任何改变。用户通过数据库进行身份验证。目前我在 Visual Studio 中运行该程序,而不是在我的网站上。通过数据库检查用户后,我使用以下代码:

FormsAuthentication.RedirectFromLoginPage(txtUserName.Text, chkPersistCookie.Checked)

那么知道为什么人们总是被授权吗?

【问题讨论】:

    标签: asp.net vb.net visual-studio-2010 webforms


    【解决方案1】:

    我认为问题在于位置标签。您只是将这些规则应用于 Styles 目录,而不是整个站点。

    【讨论】:

    • 那应该在哪里呢?我现在没有视觉工作室。但是我明天会测试。你能告诉我位置标签通常放在哪里吗?
    • 您应该只删除位置标签。你所做的是说所有这些设置都只适用于 Styles 目录。我无法想象这就是你想要的。
    • 嗯,但现在我丢失了所有文件上的 CSS,好消息是现在其他一切正常,经过 1 周的尝试解决这个问题,这只是一个愚蠢的位置标签..: p 感觉不错的上帝 =)
    • 我发现了 CSS 的问题。在您通过身份验证之前,Forms 会阻止所有文件夹。但正如上面的帖子,您可以将这些文件夹放入允许使用文件夹的位置标签中。看看这个链接stackoverflow.com/questions/485735/…
    【解决方案2】:

    您不应该在未登录时编写任何代码来执行重定向。该框架足够智能,可以查看身份验证并让您登录。

    需要注意的两点:

    改变这个:

    <deny users="*" />
    

    到:

    <deny users="?" />
    <allow users="*" />
    

    这只会拒绝未经身份验证的用户。

    如果这有什么不同,第二个要检查的项目是用户信息。在即时窗口中,输入:

    HttpContext.Current.User.Identity.Name HttpContext.Current.User.Identity.AuthenticationMode //或类似名称,忘记确切名称

    看看它告诉你什么......还有什么类型的对象是身份?是 GenericIdentity、FormsIdentity 还是 WindowsIdentity?

    谢谢。

    【讨论】:

    • 我将 更改为 但我仍然有同样的问题。否定 ?意味着不允许陌生人进入。但是 allow * 有什么作用呢?此后我尝试了这个 HttpContext.Current.User.Identity.AuthenticationType,返回值是 NTLM。由于我是 asp.net 的新手,我不知道这是什么,也许你能告诉我? :) 然后我尝试了这个 HttpContext.Current.User.Identity.GetType 来获取身份的类型,即 System.Security.Principal.WindowsIdentity。这是你想要的吗? :)
    • 哦,还有名字,我从身份中得到的是 Unreal\Admin。这是我的计算机的名称和我在这台计算机上的用户帐户的用户名。实际上,我在此站点上曾有一个关于如何更改此问题的较早问题:stackoverflow.com/questions/5152735/…
    • 是的,它使用的是 windows 身份验证,而不是表单身份验证。一个deny后的表示允许所有认证的用户(处理顺序为:deny unauthenticated,allow all,这些规则按顺序处理)。
    • 我不知道为什么它使用窗体而不是窗体,但这就是 NTLM 安全性...所以再次仔细检查您的配置文件。
    • 身份验证> 这是我的网络配置文件的精确复制粘贴。有什么想法吗?好像没有其他地方我必须写“表格”吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 2012-03-08
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多