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

iOS应用Azure AD accessToken版本不符求助(已设accessTokenAcceptedVersion为2)

解决Azure AD v2.0端点返回v1.0 Access Token的问题

我之前帮朋友排查过几乎一模一样的问题,给你几个实用的排查和解决方向:

  • 先确认作用域的格式是否符合v2.0要求
    你用的https://storage.azure.com/user_impersonation看起来没问题,但v2.0端点有时候对作用域的格式更挑剔。可以试试换成存储账户对应的应用ID URI作为前缀,比如https://<你的租户域名>.onmicrosoft.com/<存储账户名>/user_impersonation,或者直接用存储账户的客户端ID加上/user_impersonation(比如<存储账户客户端ID>/user_impersonation),再重新请求token试试。

  • 检查MSAL初始化的Authority是否是v2.0版本
    一定要确保你初始化MSALPublicClientApplication时用的是v2.0的Authority端点,代码大概是这样:

    let authority = try MSALAADAuthority(url: URL(string: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize")!)
    let pca = try MSALPublicClientApplication(clientId: "<你的客户端ID>", authority: authority)
    

    如果Authority用的是v1.0的旧端点(比如没加/oauth2/v2.0后缀),哪怕应用清单设置了accessTokenAcceptedVersion,也大概率返回v1的token。

  • 清除MSAL缓存后重试
    旧的v1.0 Access Token可能还躺在MSAL的本地缓存里,MSAL会优先返回缓存的有效token,根本不会去请求新的v2版本。你可以调用MSAL的缓存清理方法,或者直接卸载重装应用,然后重新走一遍登录流程:

    MSALPublicClientApplication.clearCache(for: pca.configuration)
    
  • 再核对应用注册的权限配置

    1. 确认你是在Azure AD的v2.0应用注册界面添加的存储账户权限,不是那种旧的v1.0传统应用注册。
    2. 如果是企业账户的话,要检查权限是否已经授予管理员同意,没授权的话也可能导致token版本异常。
  • 解码Access Token看看受众字段
    用jwt.io解码后,重点看aud字段:

    • 如果aud是存储账户的v1.0应用ID(一串很长的字符串),说明你请求的还是v1资源,得调整作用域指向v2的资源标识。
    • 如果aud是v2的应用ID URI,那再确认accessTokenAcceptedVersion确实在应用清单里设成了2,并且保存后等个5-10分钟——Azure AD的配置有时候会有缓存延迟,不是改了立刻生效的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:47:27