在没有 IIS 管理器的情况下禁用基本身份验证

Posted

技术标签:

【中文标题】在没有 IIS 管理器的情况下禁用基本身份验证【英文标题】:Disable Basic-Authentication without IIS manager 【发布时间】:2022-01-09 05:03:39 【问题描述】:

我的 ASP.NET MVC Web 应用程序通过显式发送 401 状态代码和 www-authenticate 标头来处理身份验证本身,以使浏览器显示基本身份验证对话框。

我的托管服务提供商不提供对 IIS 管理器的访问权限,并且始终启用 IIS BasicAuthenticationModule。

不幸的是,由我的应用程序实现的自定义基本身份验证现在被 IIS BasicAuthenticationModule “隐藏”了。每当我发送 401 时,BasicAuthenticationModule 似乎认为处理身份验证是他的责任。它还覆盖了我的应用程序的自定义 www-authenticate 标头。

有没有办法只使用 web.config 为我的 Web 应用程序禁用 IIS 模块?我已经尝试将以下设置添加到 web.config:

<configuration>
  <system.webServer>
    <modules>
      <remove name="BasicAuthenticationModule" />
    </modules>
  </system.webServer>
</configuration>

但这只会产生一个锁冲突错误。这个设置也没有成功:

<configuration>
  <system.web>
    <authentication mode="None" />
  </system.web>
</configuration>

还有其他建议吗?

【问题讨论】:

如果您不是此 IIS 服务器的管理员,则无法覆盖。因此,除非您的服务提供商允许您这样做,否则不要在这个死胡同上浪费时间。 【参考方案1】:

如果你在 IIS 管理器上禁用任何身份验证并检查 web.config,你会发现其中没有关于身份验证的配置。因为配置保存在 applicationhost.config 文件中。这就是为什么你需要使用 IIS 管理器。(只有管理员可以使用 IIS 管理器)

但是根据microsoft docs,可以使用appcmd来配置这些设置。这会将配置设置提交到 ApplicationHost.config 文件中的相应位置部分。

appcmd.exe set config "site name" -section:system.webServer/security/authentication/basicAuthentication /enabled:"False"  /commit:apphost

【讨论】:

以上是关于在没有 IIS 管理器的情况下禁用基本身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 WCF 数据服务的身份验证方案

webDAV IIS6 身份验证不适用于匿名禁用

在 IIS 中禁用匿名身份验证后 WebServiceHost 无法正常工作

通过 IIS 在 ASP Classic 中进行 HTTP 身份验证(基本或摘要)[关闭]

WebServiceHost在IIS中禁用匿名身份验证后不起作用

iis 访问网站需要进行身份验证