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

Azure Functions+Entra客户租户:EasyAuth用错误URL获取JWT密钥

问题分析与解决方案

核心问题

你的Azure Functions通过App Service EasyAuth验证令牌时,错误使用了通用租户端点https://MYTENANT.ciamlogin.com/common/discovery/keys,而Entra ID客户租户(CIAM)不支持common域,导致密钥获取失败,触发500错误(IDX12741、500.79)。偶尔自动恢复大概率是缓存刷新或密钥轮换时的临时适配,无法稳定解决问题。

解决步骤

1. 强制指定租户专属验证元数据地址

进入Azure Functions对应的App Service后台:

  • 打开「身份验证」→ 选中你的Entra ID身份提供者 → 点击「编辑」
  • 切换到高级模式,在「元数据地址」中填入租户专属的OpenID发现文档URL:
    https://<你的租户域名>.ciamlogin.com/<你的租户ID>/v2.0/.well-known/openid-configuration
    
  • 保存配置后重启App Service,强制EasyAuth使用租户特定端点获取密钥

2. 匹配令牌受众(Audience)

确保EasyAuth验证时匹配令牌的aud声明:

  • 在同一身份提供者编辑页面,「受众」字段填入你的Azure Functions应用ID URI(格式如api://<函数应用客户端ID>),或令牌对应的自定义API受众(可通过jwt.ms解析令牌查看aud值)
  • 若受众不匹配,即使密钥获取正常,也会触发验证失败

3. 清除EasyAuth缓存

手动清除缓存避免旧配置残留:

  • 打开App Service的Kudu控制台(https://<函数应用名称>.scm.azurewebsites.net)
  • 进入「Debug console」→「CMD」,执行命令删除缓存目录:
    rmdir /s /q D:\home\site\wwwroot\.auth
    
  • 重启App Service

4. 检查应用设置冲突

进入App Service「配置」→「应用设置」:

  • 排查是否存在WEBSITE_AUTH_OPENID_ISSUER、WEBSITE_AUTH_OPENID_METADATA等自定义设置,若有确保值与UI配置一致,无必要则删除(避免覆盖正确配置)

5. 验证令牌发行者(Issuer)

用jwt.ms解析SPA获取的令牌,确认iss声明格式为:

https://<你的租户域名>.ciamlogin.com/<你的租户ID>/v2.0/

确保该值与EasyAuth配置的元数据地址中的发行者完全一致,否则会导致验证逻辑混乱

额外排查建议

  • 若使用消费计划,冷启动可能导致缓存加载异常,可临时切换到高级计划测试稳定性
  • 直接用Postman调用租户专属的密钥端点(https://<你的租户域名>.ciamlogin.com/<你的租户ID>/v2.0/discovery/keys),确认返回正常,排除网络或租户配置问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:43:20