You need to enable JavaScript to run this app. Windows登录、AAD、Excel与Azure Functions认证:VBA宏调用受保护函数如何获取AAD令牌
优惠活动
大模型
产品
解决方案
定价
更多

Windows登录、AAD、Excel与Azure Functions认证:VBA宏调用受保护函数如何获取AAD令牌

VBA调用受AAD保护Azure Function的令牌获取实现方案
  • 关于你之前推测的“直接读取Windows存储的当前登录用户认证令牌”的路径:这条路在实际运行中走不通。Windows系统存的AAD相关令牌受进程权限隔离、场景绑定的受众校验规则保护,低权限运行的Excel VBA进程既没有权限直接读取缓存的令牌,就算通过特殊手段拿到缓存值,令牌本身的适用范围和签名校验规则也过不了Azure Function的访问校验。

可落地的两种无额外交互的令牌获取路径

  1. 基于当前登录用户上下文走Azure AD集成Windows身份验证(IWA)流
    这是和你当前场景适配度最高的方案,全程不需要用户输入账号密码,也不需要硬编码任何凭证。
    • 前置配置:在Azure AD端打开Azure Function对应的AAD应用注册的集成Windows身份验证授权,允许当前租户的域用户通过非交互式请求获取目标API的访问令牌。
    • VBA端实现逻辑:直接用内置的WinHttpRequest对象调用AAD的令牌端点,核心请求参数为:
      POST https://login.microsoftonline.com/{你的AAD租户ID}/oauth2/token
      grant_type: urn:ietf:params:oauth:grant-type:iam:dbiwa
      resource: {你的Azure Function绑定的AAD应用客户端ID,也就是访问校验要求的audience值}
      
      这个请求发出去后,因为当前Windows/Office环境已经存了用户的AAD登录上下文,AAD端点会直接返回有效期1小时的有效访问令牌,不需要额外的交互步骤。
  2. 复用Office 365客户端的已缓存认证上下文
    如果你用的Excel已经通过企业/学校账号完成了Microsoft 365签入,可以通过VBA声明对应的Win32接口,复用Office内置的MSAL认证组件,直接请求对应API范围的访问令牌,不需要自己搭完整的OAuth流程。

常见实现注意事项

  • 不要在VBA里用硬编码客户端密钥的客户端凭证流拿令牌:宏代码的可提取性极高,硬编码的密钥一旦扩散会带来严重的安全风险。IWA流是基于当前登录用户的身份鉴权,完全符合最小权限的安全要求。
  • 拿到令牌后的接口调用逻辑和你之前Web端验证的逻辑完全一样:把令牌写到请求头Authorization: Bearer {令牌值}里发请求就行,不需要额外调整Function端的AAD认证配置。

常见踩坑提醒:如果IWA流返回要求交互的错误,先检查当前Windows登录用户的账号是否和AAD租户完成了域加/混合Azure AD join的状态匹配,没完成域身份映射的用户会被AAD要求走额外的登录交互验证。


内容的提问来源于stack exchange,提问作者Sascha Jäger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 07:45:03