0

我的 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>

还有其他建议吗?

4

1 回答 1

0

如果在 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
于 2021-12-03T02:08:11.503 回答