文件夹中的 web.config 允许全部或不进行用户身份验证

Posted

技术标签:

【中文标题】文件夹中的 web.config 允许全部或不进行用户身份验证【英文标题】:web.config in folder allowing all or no user authentication 【发布时间】:2013-08-15 00:02:28 【问题描述】:

我有一个包含几个调查 aspx 页面的文件夹。我必须在这些 aspx 页面上设置权限。有 5 个不同的页面,只有一个允许某些用户访问。我添加了一个 web.config 文件来允许和拒绝用户,但它不起作用。如果我允许我的用户名并添加 deny="?" 我没有访问权限,但如果我添加另一个用户,请删除我的用户名并取消拒绝选项,我将获得登录系统的权限。如果我取消拒绝,我可以获得访问权限,但是所有用户都可以访问该页面。

添加我的用户凭据并拒绝我无法访问的所有匿名用户。有人可以指出我做错了什么的正确方向吗? 可能是它没有读取或获取我的 Windows 登录凭据吗?我正在使用 Visual Studio 2012,实体框架。

这就是我所做的:

   //Web Config that allows and denies:
   <?xml version="1.0"?>
        <configuration>
        <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
     </system.web>

    <location path="QualityCheckSurvey.aspx">
    <system.web>
      <authorization>
        <allow users="DomainName\User2" />
        <deny users="?" /> 
      </authorization>
    </system.web>
    </location>
    </configuration>

我已将身份验证模式设置为 windows。

编辑 似乎权限设置不正确。但它仍然无法正常工作。当我拒绝 *,但允许 USER1 时,即使提示登录请求,用户也无法访问。即使用户有权访问,登录窗口对话框也会不断弹出 3 次。让它否认? (匿名)允许每个人都可以访问,即使我删除了拒绝并且只有 USER1 的允许标记,其余用户仍然可以访问......我现在在本地运行,但即使在 IIS 上设置那里的身份验证(Windows 和基本身份验证)完全相同....

编辑 这是我正在使用的实际代码。此路径“”中只允许 3 个用户。此 web.config 文件位于包含 5 种不同类型调查的调查文件夹中。只有这一项调查应该允许某些用户,其余的调查任何人都可以访问....

     <?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <allow users="*"/>
    </authorization>
  </system.web>

  <location path="QualityCheckSurvey.aspx">
    <system.web>

      <authorization>
        <deny users="?" />
        <allow users="OEP\kevinh, OEP\shabierg, OEP\heilened" />
        <deny users="*" />
      </authorization>

    </system.web>
  </location> 

在应用程序根目录的主 web.cofin 中,我已将身份验证模式设置为 windows:

     <authentication mode="Windows">

<!--<forms loginUrl="~/Account/Login.aspx" timeout="2880" />-->
    </authentication>

【问题讨论】:

您使用的是哪个版本的 IIS? 项目是否启用了 Windows 身份验证? @CodeCaster,是的,我已检查它是否已启用.... 您的请求实际上来自“DomainName\User2”吗?您可能想要调试您的项目,并确保 Page.User 是该 ID(或 Page.User.Identity.Name)。 是的,域名\User2 正在工作...我已经编辑了 IIS 的 applicationhost.config 文件,它给了我一个使用我的凭据登录的弹出窗口,但它仍然不允许我访问它。弹出窗口直到现在才出现...... 【参考方案1】:

在您的问题上,您说您有一个文件夹名称,但在 web.config 上您只给出了路径上的文件名。使用文件夹名/文件名.aspx,如下所示。使用拒绝用户=“*”而不是拒绝用户=“?”

<location path="foldername/QualityCheckSurvey.aspx">
    <system.web>
        <authorization>
            <allow users="DomainName\User2"/>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>

编辑

这看起来您在同一个应用程序中有多个 web.config 文件。为避免混淆,只需删除调查文件夹中的那个,然后在根文件夹 web.config 中添加此代码。

 <?xml version="1.0"?>
<configuration>
  <system.web>
    <authorization>
      <authentication mode="Windows" />
    </authorization>
  </system.web>

  <location path="survey/QualityCheckSurvey.aspx">
    <system.web>
      <authorization>
        <allow users="OEP\kevinh, OEP\shabierg, OEP\heilened" />
        <deny users="*" />
      </authorization>
    </system.web>
  </location> 

我假设调查文件夹位于根文件夹内。

【讨论】:

那么它没有拾取aspx页面的路径。添加文件夹名称时出现的错误是:无法访问请求的页面,因为该页面的相关配置数据无效。配置错误位置路径包含无效字符配置文件 \\?\C:\Users\PCName\Documents\Visual Studio 2012\WebSites\NCTonerPublic\NCTonerPublic\Surveys\web.config 你给的路径是什么?只需在此处显示实际代码。您应该只提供相对路径而不是完整路径。 web.config 和 QualityCheckSurvey.aspx 是否在同一个文件夹中? 它仍然拒绝所有人的访问...只是不断弹出Windows身份验证屏幕...这是我在3之后得到的错误描述:访问服务此请求所需的资源时发生错误.服务器可能未配置为访问请求的 URL。错误消息 401.2.:Unauthorized:Logon failed due to server configuration.请根据您提供的凭据和 Web 服务器上启用的身份验证方法验证您是否有权查看此目录或页面。请与 Web 服务器的管理员联系以获得更多帮助 你是否在网络服务器上禁用了所有身份验证并启用了 Windows 身份验证? 在顶部您说“域名\User2 正在运行”。在这里你说过,“它仍然拒绝所有人访问”。哪个论述是对的?如果它拒绝所有人访问,则问题可能是服务器未加入域。【参考方案2】:

如果在创建项目后将 Windows 身份验证添加到项目中,则修复此错误

这是一口。当我将 Windows 身份验证添加到现有项目时,我遇到了这个问题。在它起作用之前,我需要做几件关键的事情:

    在解决方案资源管理器中,单击项目,然后按 F4。这应该会打开项目属性。

    在项目属性和开发服务器下,进行以下更改:

    匿名身份验证:已禁用 Windows 身份验证:已启用

    &lt;system.web&gt; 下的Web.config 中包含以下内容:

    <authorization>
      <allow users="DOMAIN\user"/>
      <deny users="*"/>
    </authorization>
    

    还在Web.config&lt;appSettings&gt;

    <add key="owin:AutomaticAppStartup" value="false"/>
    

这对我有用。如果我做错了什么,请告诉我。

希望这将有助于在创建项目后使用 Windows 身份验证的未来个人。

【讨论】:

【参考方案3】:
<deny users="?" /> 
<allow users="DomainName\User2" />
<deny users="*" /> 

【讨论】:

它只是不断弹出Windows身份验证,但拒绝所有用户,没有人访问......

以上是关于文件夹中的 web.config 允许全部或不进行用户身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 web.config 文件中的 Access-Control-Allow-Origin 允许多个源域?

如何通过web.config文件中的Access-Control-Allow-Origin允许多个源域?

Web.config 允许特定用户访问位置

Web.config 不工作 - 访问控制允许来源

使用 web.config 允许服务器端包含在 HTML 文件 (IIS) 中

IIS7,web.config 只允许在网站的 /uploads 目录中使用静态文件处理程序