Asp Web API部署到IIS服务器后Basic Auth失效返回401错误问题排查
ASP Web API部署IIS后基础身份验证接口返回401的常见原因及解决方法
检查IIS基础身份验证模块安装状态
本地Visual Studio自带的IIS Express默认集成了基础身份验证模块,但正式IIS服务器需要手动安装对应角色服务:进入「服务器管理器」->「添加角色和功能」->「Web服务器(IIS)」->「安全性」,确认「基础身份验证」项已勾选安装,仅在站点身份验证界面启用功能不会生效,会直接导致IIS拦截验证请求返回401。检查web.config验证模块注册配置
IIS 7+默认运行在集成模式下,仅在<system.web>节点的<httpModules>中注册自定义身份验证模块不会生效,必须同步在<system.webServer>节点注册模块,示例配置如下:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"> <add name="BasicAuthModule" type="你的自定义验证类完整命名空间, 程序集名称"/> </modules> </system.webServer>
同时确认<system.web>下配置了<authentication mode="None"/>,避免和ASP.NET自带的身份验证逻辑冲突。
- 检查IIS授权优先级规则
同时启用匿名身份验证和基础身份验证时,IIS默认优先走匿名验证逻辑,如果没有显式配置允许匿名访问,IIS会在你的自定义验证逻辑执行前就拦截请求返回401,需要在<system.web>节点添加如下配置:
<authorization> <allow users="?"/> </authorization>
所有请求先进入应用程序逻辑,再由你实现的身份验证特性判断权限。
- 关于HTTP不安全标记的影响
Mycroft Doc的不安全标记仅为安全预警,提示HTTP协议下基础身份验证的Authorization头是明文Base64编码,本身不会拦截请求。如果配置了IIS HTTPS强制跳转规则,HTTP请求会被302重定向到HTTPS地址,该过程中Authorization头会丢失,最终请求到接口时没有携带验证信息就会返回401,可以抓包确认请求是否存在跳转、验证头是否正常携带。
内容的提问来源于stack exchange,提问作者Jophy job
相关产品推荐
相关产品推荐

