【问题标题】:URL authorization failed for the request请求的 URL 授权失败
【发布时间】:2009-05-27 06:57:29
【问题描述】:

我正在将一些站点移至运行 IIS6 的新 Windows 2003 安装。但是,我遇到了表单身份验证问题。有问题的站点在具有相同操作系统和 IIS 版本的旧机器上运行良好。

当我尝试登录网站时,我收到一个事件日志“请求的 URL 授权失败”并且页面重定向回:-

http://www.demo.socialclause.net/logout.aspx?ReturnUrl=/Secure/Procurement/Default.aspx

新旧服务器都包含相同的设置和相同的权限。显然我在某个地方错过了一个设置,但无法理解它。有人可以帮忙吗?

我的 web.config 包含以下内容:-

<authentication mode="Forms">
  <forms slidingExpiration="true" name=".ASPXAUTH" protection="All" loginUrl="~/logout.aspx" timeout="60" ></forms>
</authentication>

在 /secure 目录(这不是虚拟目录)中,我的 web.config 包含:-

<?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <allow roles="ClauseAdmin"/>
      <allow roles="ProcurementAdmin"/>
      <allow roles="ReportAdmin"/>
      <allow roles="SystemAdmin"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</configuration>

事件日志显示:

Event Type: Information
Event Source:   ASP.NET 2.0.50727.0
Event Category: Web Event 
Event ID:   1314
Date:       26/05/2009
Time:       21:01:05
User:       N/A
Computer:   WILDEAA1
Description:
Event code: 4007 
Event message: URL authorization failed for the request. 
Event time: 26/05/2009 21:01:05 
Event time (UTC): 26/05/2009 20:01:05 
Event ID: af3bac34e6d74630b937a5a05d0f25f2 
Event sequence: 4 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/2067908276/Root-1-128878416581538912 
    Trust level: Full 
    Application Virtual Path: / 
    Application Path: C:\Inetpub\websites\www.demo.socialclause.net\htdocs\ 
    Machine name: WILDEAA1 

Process information: 
    Process ID: 1076 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 

Request information: 
    Request URL: http://demo.socialclause.net/Secure/Procurement/Default.aspx 
    Request path: /Secure/Procurement/Default.aspx 
    User host address: 91.84.25.241 
    User: richard@wildesoft.net 
    Is authenticated: True 
    Authentication Type: Forms 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

【问题讨论】:

    标签: asp.net iis-6


    【解决方案1】:

    尝试拒绝用户? (匿名)而不是 *(全部)

    <authentication mode="Forms">
        <forms name=".ASPXFORMSAUTH" loginUrl="~/Common/Login.aspx" timeout="450" />
      </authentication>
      <authorization>
        <deny users="?" />
        <allow roles="Admin" />
      </authorization>
    

    【讨论】:

    • 我现在进入“安全区域”看起来多么奇怪,但似乎该站点现在没有识别 IsInRole 方法,因为每个角色都返回 false。 User.IsInRole("SystemAdmin") 我仍然不明白为什么这个网站可以在旧盒子上运行。我刚刚复制了文件并以完全相同的方式设置了新盒子。还有什么想法吗?
    • 听起来您的用户没有分配任何角色,这就是您仍然可以登录的原因(不是匿名的)。看看角色提供者,你使用的是会员 aspnetdb 吗?
    • 恩,这不是问题所在。站点和数据库已被克隆,我以同一用户身份登录。该站点在我的开发盒上运行,在旧的 windows 2003 服务器上,但不在新的 2003 服务器上。一定是其他原因导致了问题。这一定是我想念的东西....还有什么想法吗?我没有使用会员 aspnetdb。
    • 实际上,这不会允许任何经过身份验证的用户访问吗?
    • 我认为德里克是对的。我的测试表明,这允许访问任何经过身份验证的用户,而不仅仅是允许角色的用户。因此,它似乎可以通过允许所有经过身份验证的用户进入。
    【解决方案2】:

    到目前为止,我只使用过 sql 角色提供程序...我认为答案在于您正在使用的角色提供程序。您的用户似乎没有获得分配的角色。你能提供你的 web.config 部分吗?例如这是我的:

          <roleManager enabled="true" defaultProvider="IDTSqlRoleProvider" cacheRolesInCookie="true" cookieProtection="All">
        <providers>
          <clear/>
          <add
            name="IDTSqlRoleProvider"
            type="System.Web.Security.SqlRoleProvider"
            connectionStringName="SqlMembershipConnectionString"
            applicationName="ConsumerSynergy"/>
        </providers>
      </roleManager>
    

    【讨论】:

      【解决方案3】:

      试试这个?基本上,您说的是允许 x、y、z,然后全部拒绝。

      <?xml version="1.0"?>
      <configuration>
        <system.web>
          <authorization>
            <deny users="*"/>
            <allow roles="ClauseAdmin"/>
            <allow roles="ProcurementAdmin"/>
            <allow roles="ReportAdmin"/>
            <allow roles="SystemAdmin"/>
          </authorization>
        </system.web>
      </configuration>
      

      如果这不起作用,试试这个。

      <?xml version="1.0"?>
      <configuration>
        <system.web>
          <authorization>
            <allow roles="ClauseAdmin"/>
            <allow roles="ProcurementAdmin"/>
            <allow roles="ReportAdmin"/>
            <allow roles="SystemAdmin"/>
            <deny users="?"/>
          </authorization>
        </system.web>
      </configuration>
      

      【讨论】:

        【解决方案4】:

        我出现了同样的错误消息,结果发现我在 web.config 的授权部分中的角色名称拼写错误。

        【讨论】:

          【解决方案5】:

          只是在这里猜测,因为如果你付钱给我,我不会使用 IIS,但也许你缺少一些需要在服务器上安装的证书或密码文件?也许您需要告诉 IIS 您要匹配的角色/用户。

          编辑:根据您透露的其他信息,我将排除证书并专注于如何定义角色。您说它们是在数据库中定义的,但是当您切换服务器时它们变得无效的事实表明了三种可能性:

          1. 您的角色定义为 Windows 系统帐户或 IIS 用户。
          2. 您的角色是 定义为数据库用户,但您的 只复制数据表,不复制 用户(我的意思是数据库 用户,而不是“用户”表 数据库)。
          3. 您的角色已定义 但阅读它们的权限有 改变了。

          我怀疑是 1.) IIS 用户。

          【讨论】:

          • 角色在数据库中定义,并在用户登录时被拉出。该站点在旧盒子上工作。我认为这与权限甚至全局策略有关,但我似乎无法找到答案。
          • 尽管如此,该语言暗示了“URL 授权”问题。我怀疑您的 SSL 或服务器证书可能设置不正确。
          • 很抱歉,我没有使用 SSL,反正我看不出这会是个什么问题。您如何推断 SSL 是问题所在?
          • 因为 SSL 客户端证书是一种限制对安全区域的访问的方法。
          猜你喜欢
          • 2016-10-01
          • 1970-01-01
          • 2022-06-15
          • 1970-01-01
          • 2012-02-03
          • 2011-03-18
          • 2017-11-13
          • 2012-10-06
          相关资源
          最近更新 更多