You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 2.2 WebAPI Azure AD认证IIS部署失败,IIS Express正常

问题描述

使用.NET Core 2.2构建的WebAPI,通过AcquireTokenByUsernamePassword方法实现Azure AD用户名密码认证,在Visual Studio的IIS Express中运行正常,但部署到IIS后调用认证方法抛出异常,内部异常为:

The operation was canceled.

堆栈异常指向MSAL在执行实例发现的网络请求阶段被取消。

认证核心代码:

string clientId = "XXXXXXXXXXXXX";
string tenanat = "XXXXXXXXXXXXXXXXXXXX";
string authority = "https://login.microsoftonline.com/" + tenanat;
string[] scopes = new string[] { "user.read" };
IPublicClientApplication app;
app = PublicClientApplicationBuilder.Create(clientId)
    .WithAuthority(authority)
    .Build();

var result = await app.AcquireTokenByUsernamePassword(scopes, userName, Password).ExecuteAsync();
return result.IdToken;
解决方案
  • 检查IIS应用程序池权限
    IIS默认的应用池身份(如ApplicationPoolIdentity)可能缺少出站网络访问权限,导致无法连接Azure AD端点。可以将应用池身份改为LocalSystem(测试用),或者为当前身份配置允许访问外部网络的权限。

  • 排查代理/防火墙限制
    服务器的防火墙或企业代理可能拦截了对Azure AD服务端点的请求,导致请求超时被取消。需要:

    1. 确保服务器防火墙允许出站访问https://login.microsoftonline.com和https://login.microsoft.com的443端口
    2. 如果使用企业代理,需在代码中配置代理,或在服务器设置系统级代理
  • 延长HttpClient超时时间
    IIS环境下网络延迟可能触发默认HttpClient超时,导致请求被取消。可以自定义HttpClient并设置更长超时:

    // 实现简单的HttpClient工厂
    public class StaticHttpClientFactory : IHttpClientFactory
    {
        private readonly HttpClient _httpClient;
        public StaticHttpClientFactory(HttpClient httpClient) => _httpClient = httpClient;
        public HttpClient GetHttpClient() => _httpClient;
    }
    
    // 在初始化MSAL应用时使用
    var httpClient = new HttpClient { Timeout = TimeSpan.FromSeconds(30) };
    app = PublicClientApplicationBuilder.Create(clientId)
        .WithAuthority(authority)
        .WithHttpClientFactory(new StaticHttpClientFactory(httpClient))
        .Build();
    
  • 启用TLS 1.2
    Azure AD要求使用TLS 1.2及以上版本,若服务器未启用会导致请求失败。在WebAPI启动代码中添加强制启用TLS 1.2的逻辑:

    System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12;
    

    也可以通过服务器注册表配置全局启用TLS 1.2。

  • 更新MSAL版本
    旧版本MSAL可能与.NET Core 2.2在IIS环境下存在兼容性问题,建议更新到与.NET Core 2.2兼容的最新MSAL NuGet包(注意:.NET Core 2.2已停止官方支持,长期来看建议升级到更高版本的.NET)。

内容的提问来源于stack exchange,提问作者Shivraj Mujumale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:55:24