在没有 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 管理器的情况下禁用基本身份验证的主要内容,如果未能解决你的问题,请参考以下文章
在 IIS 中禁用匿名身份验证后 WebServiceHost 无法正常工作
通过 IIS 在 ASP Classic 中进行 HTTP 身份验证(基本或摘要)[关闭]