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

Azure App Service API首次请求报500:无法下载OpenID Connect配置

解决Azure App Service API闲置后OpenID配置丢失的500错误

以下是几种可直接落地的解决方法:

1. 显式配置OpenID缓存时长

在API的身份验证逻辑里强制设置OpenID Connect配置的缓存周期,避免每次请求都重新拉取配置。
以ASP.NET Core为例,在Program.cs或Startup.cs中修改认证配置:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.Authority = "https://login.microsoftonline.com/你的租户ID/v2.0";
        options.Audience = "你的API客户端ID";
        // 设置缓存有效期,比如1小时,可根据需求调整
        options.ConfigurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(
            $"{options.Authority}/.well-known/openid-configuration",
            new OpenIdConnectConfigurationRetriever(),
            new HttpDocumentRetriever { RequireHttps = true })
        {
            RefreshInterval = TimeSpan.FromHours(1)
        };
    });

配置后,API会缓存OpenID配置,闲置后无需重新下载,直接用缓存内容验证令牌。

2. 开启App Service的"始终开启"与预热功能

Azure App Service闲置后会自动休眠实例,冷启动时容易出现配置拉取失败:

  • 进入Azure门户的目标应用服务资源,打开配置 > 常规设置
  • 开启始终开启选项,阻止实例休眠
  • 同时设置预热实例的最小数量,保证至少有一个实例处于活跃状态

3. 启动时预加载OpenID配置

在API启动阶段主动拉取并缓存配置,避免首次请求才触发下载:
在ASP.NET Core的启动逻辑中添加如下代码:

var configManager = new ConfigurationManager<OpenIdConnectConfiguration>(
    "https://login.microsoftonline.com/你的租户ID/v2.0/.well-known/openid-configuration",
    new OpenIdConnectConfigurationRetriever(),
    new HttpDocumentRetriever());

// 启动时同步拉取配置
await configManager.GetConfigurationAsync(CancellationToken.None);

// 将配置管理器注入服务容器
builder.Services.AddSingleton(configManager);

这样API启动后就会提前获取配置,闲置后恢复请求时直接用缓存内容。

4. 排查网络访问限制

确保App Service实例能稳定访问Azure AD的OpenID配置端点:

  • 检查App Service的出站网络规则,确认未限制对login.microsoftonline.com的HTTPS(443端口)访问
  • 如果使用虚拟网络集成,核实NSG规则允许相关流量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 09:42:13