【Azure Entra ID】AcquireTokenForClient 触发 Entra ID 请求风暴?Shared Cache 才是 Web App 登录的正确方式

简介: Web App调用Azure Entra ID中国区时因未有效缓存令牌,导致请求激增、登录不稳定。根本原因在于MSAL的`ConfidentialClientApplication`未复用且未启用共享缓存。通过单例模式创建应用实例,并配置`WithCacheOptions(CacheOptions.EnableSharedCacheOptions)`,可使令牌在有效期内被复用,避免频繁请求认证端点,显著降低Entra ID负载,提升系统稳定性和性能。

问题描述

Web App 调用 Azure Entra ID 中国区认证端点 login.chinacloudapi.cn 获取访问令牌时,产生了异常巨大的 Entra ID 请求量,最终导致请求失败和整体登录不稳定。

问题发生在使用 MSAL 的 AcquireTokenForClient 获取 Token 场景中,表面现象是“Web App 调用 Entra ID 失败”,实质原因则与令牌缓存未生效密切相关。

 

问题解答

Web App 使用的是 Client Credentials Flow(客户端凭据模式),核心实现依赖 MSAL 的 ConfidentialClientApplication 与 AcquireTokenForClient 方法。

 

优化后的关键代码如下(原文代码):

    var app = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithClientSecret(clientSecret)
        .WithAuthority(new Uri(authority))
        .WithLegacyCacheCompatibility(false)
        .WithCacheOptions(CacheOptions.EnableSharedCacheOptions)
        .Build();

以及在获取访问令牌时:

await app.AcquireTokenForClient(scopes).ExecuteAsync();

围绕上述代码,AcquireTokenForClient 获取 Token 的完整流程可以拆解为以下几个关键点:

一:ConfidentialClientApplication 是 Token 缓存的承载者

ConfidentialClientApplication 表示 Web App 自身在 Azure Entra ID中的“应用身份”,它不仅负责向 Entra ID发起认证请求,同时内部维护了 MSAL 的访问令牌缓存。如果该对象被频繁创建或生命周期过短,缓存将无法复用,直接导致每次获取 token 都访问 Entra ID。

 

二:WithCacheOptions(CacheOptions.EnableSharedCacheOptions) 的核心作用


.WithCacheOptions(CacheOptions.EnableSharedCacheOptions)

这行代码的意义在于:

  • 显式启用 Shared Token Cache
  • 允许同一应用实例在多个 token 请求之间共享并复用已获取的 access token
  • 在 token 有效期内,MSAL 会优先从缓存返回 token,而不是访问 Entra ID

缺少该配置,或未正确复用 app 对象时,即使使用了 MSAL,也相当于每次 AcquireTokenForClient 都是一次全新的登录请求。

 

三:AcquireTokenForClient 的真实执行逻辑

当调用以下代码时:

await app.AcquireTokenForClient(scopes).ExecuteAsync();

MSAL 实际执行顺序为:

1:在本地缓存中查找匹配 scopes 的 access token

2:如果 token 存在且未过期 → 直接返回(不调用 AAD (Entra ID))

3:如果不存在或已过期 → 才向 login.chinacloudapi.cn 发起一次新的 token 请求

4:将新 token 写入缓存,供后续请求复用

 

四:最后,正确的方式是

  • 应用级别(如 Startup / Singleton)创建一次 ConfidentialClientApplication
  • 启用 .WithCacheOptions(CacheOptions.EnableSharedCacheOptions)
  • 所有业务代码统一调用 AcquireTokenForClient 获取 token


通过该方式,可以显著降低对 Azure Entra ID的请求压力,避免登录风暴,并提升 Web App 的稳定性。

 

参考资料

MSAL Token Cache 说明 :https://learn.microsoft.com/en-us/entra/identity-platform/msal-acquire-cache-tokens#acquiring-tokens

 


当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
11月前
|
消息中间件 人工智能 NoSQL
AgentScope x RocketMQ:打造企业级高可靠 A2A 智能体通信基座
Apache RocketMQ 推出轻量级通信模型 LiteTopic,专为 AI 时代多智能体协作设计。它通过百万级队列支持、会话状态持久化与断点续传能力,解决传统架构中通信脆弱、状态易失等问题。结合 A2A 协议与阿里巴巴 AgentScope 框架,实现高可靠、低延迟的 Agent-to-Agent 通信,助力构建稳定、可追溯的智能体应用。现已开源并提供免费试用,加速 AI 应用落地。
770 35
AgentScope x RocketMQ:打造企业级高可靠 A2A 智能体通信基座
|
11月前
|
存储 运维 NoSQL
架构稳、低运维、按需付- Dify x 阿里云 Tablestore 解锁百亿级索引
今天,Dify 正式适配阿里云 Tablestore 向量索引能力,并依托 阿里云计算巢 提供一键部署体验。企业无需重构现有架构,即可享受极简运维、按需付费的灵活成本,以及原生支持百亿级向量检索的扩展能力,从容应对AI应用的结构化数据增长。
598 3
架构稳、低运维、按需付- Dify x 阿里云 Tablestore 解锁百亿级索引
|
11月前
|
存储 人工智能 运维
AI重构知识管理:如何破解技术团队的6大效率困局
通过AI全链路赋能,实现技术文档智能生成、语义检索、隐性知识沉淀与企业级安全管控,破解研发中API文档低效、故障排查慢、知识复用难等痛点,提升文档效率300%、故障修复提速80%,助力团队从“被动管理”迈向“智能协同”,重构高效能研发新范式。
458 12
|
11月前
|
运维 编译器 Linux
阿里云服务器操作系统V3 aarch64是什么?
阿里云自研Alinux 3.2304,基于Linux内核深度优化,适配云计算场景。支持最新安全补丁、内核升级及容器组件优化,集成高性能编译器与运维工具,提升系统稳定性与兼容性。
|
11月前
|
消息中间件 人工智能 运维
别让"我觉得"毁了架构:用这条指令让AI做你的技术选型审计员
技术选型往往受限于主观偏见和认知盲区。本文提供了一套“技术选型分析”AI指令,将大模型化身为客观的架构审计员,通过多维度评分和风险评估,帮助开发者从“经验驱动”转向“证据驱动”,做出经得起时间考验的技术决策。
481 5
|
11月前
|
传感器 人工智能 边缘计算
智慧养老新基建:康养机器人核心技术解析与主流产品选型指南
随着老龄化加剧,康养机器人正从概念走向落地,融合SLAM导航、多模态感知、医疗级数据交互、大模型语音理解与康复评估技术,实现健康监测、跌倒预警、情感陪伴等多元功能。本文解析五大核心技术,并推荐猎户星空、优必选、新松、傅利叶及ElliQ等代表性产品,涵盖居家、机构、康复与情感场景,助力智慧养老科学选型与应用落地。(238字)
|
11月前
|
传感器 算法 机器人
医疗导诊机器人关键技术深度解析
智慧医院建设推动导诊机器人迈向智能化,集成医疗大模型、知识图谱、多传感器融合、情感计算等核心技术,实现精准分诊、厘米级导航、跨楼层协同与人性化交互,正从“迎宾员”转型为医疗流程中枢,助力医疗服务高效化、人性化、安全化发展。
|
11月前
|
人工智能 自然语言处理 安全
2025AI数字人企业名单列表新发布及全域技术新排行
解码数字人企业TOP10,透视技术革新与产业未来。像衍科技领衔,依托浙大科研实力,实现全栈自研与多模态交互突破;阿里、华为、腾讯等巨头布局电商、工业、娱乐等全场景应用。从医疗陪护到政务导办,数字人正从“形似”迈向“神似”,推动AI进入“生产力时代”。轻量化、私有化、行业化成关键趋势,万亿市场加速成型。
|
11月前
|
消息中间件 人工智能 NoSQL
AgentScope x RocketMQ:打造企业级高可靠 A2A 智能体通信基座
Apache RocketMQ 推出轻量级通信模型 LiteTopic,专为 AI 场景设计,结合 A2A 协议与 AgentScope 框架,实现多智能体高效、可靠协作,支持海量会话持久化、断点续传与动态订阅,重塑企业级 AI 应用架构。
519 28
|
11月前
|
Kubernetes 网络协议 容器
【k8s-1.34.2安装部署】七.coredns-v1.13.1安装
本章介绍如何安装并验证coredns-v1.13.1。下载coredns.yaml.base文件,替换镜像地址、DNS域、内存限制及服务IP,应用配置后通过svc和pod验证CoreDNS解析功能是否正常。
930 11