Angular调用IIS托管.NET Core API时Windows身份验证失败求助
问题:Angular调用Windows身份验证的.NET Core API无法传递AD身份
已将Angular部署到本地IIS,配置为仅接受Windows身份验证用户,加载首页时浏览器会要求输入凭证。在Angular组件中执行HTTP DELETE操作调用IIS托管的.NET Core REST API时,API端无法识别调用者的AD身份,返回“无法识别身份”错误。
尝试的调用方式
1. 使用Angular HttpClient
constructor(private http: HttpClient) {} onClick() { // 准备参数,构造HttpParams等... this.http.delete<ApiHttpRawResponse>(finalUrl, { headers: new HttpHeaders({ 'Content-Type': 'application/json' }), responseType: 'json', params: parms, withCredentials: true } ) }
2. 使用fetch API
fetch(finalUrl, { method: 'DELETE', credentials: 'include', headers: { 'Content-Type': 'application/json', 'Authorization': 'Negotiate' } })
API端调试情况
.NET Core API中通过IHttpContextAccessor获取调用者身份时,identityName为null:
public WebLocatingService(IHttpContextAccessor httpContextAccessor) { var ctx = httpContextAccessor.HttpContext; var identityName = ctx?.User?.Identity?.Name; // 此处identityName为null }
Angular项目的IIS web.config配置
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <authentication mode="Windows" /> <authorization> <deny users="?" /> </authorization> </system.web> </configuration>
附加信息
- IIS启用匿名身份验证可解决CORS预检问题,但JS端无法发送身份数据
- IIS端禁用匿名身份验证+安装CORS模块是可能的解决方向(不适用于IIS Express)
- 当Angular由ng server托管时,设置
withCredentials: true的HttpClient可正常调用API - 部分场景下fetch在此类Windows身份验证场景中表现异常
内容的提问来源于stack exchange,提问作者Zoltan Hernyak
相关产品推荐
相关产品推荐

