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

Flutter用azure_ad_authentication遇InvalidAuthenticationToken错误求助

问题解决:Azure AD认证token提示Invalid AuthenticationToken(Invalid audience)

核心问题定位

你的问题根源在于scope格式不完整,导致获取的token受众(aud)不匹配自定义API的要求,同时jwt.io的签名验证异常是因为公钥不匹配导致的误报。

分步解决方案

  1. 修正Scope格式
    Azure AD中自定义API的scope必须包含API的Client ID,正确格式应为:

    api://{你的自定义API的Client ID}/AccessAsUser
    

    你当前使用的api:///AccessAsUser缺少了API的Client ID,这会导致token的受众指向默认的Microsoft Graph,而非你的自定义API,从而触发Invalid audience错误。

  2. 更新认证请求的Scope参数
    在Flutter代码中,将请求token的scope数组改为完整格式:

    final List<String> scopes = [
      'api://xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx/AccessAsUser'
    ];
    

    替换其中的xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx为你自定义API的Client ID。

  3. 验证Token的受众与权限
    重新登录获取token后,通过本地控制台解码确认:

    • aud字段值等于自定义API的Client ID(或api://{Client ID})
    • scp字段包含AccessAsUser权限
  4. 关于jwt.io的Invalid Signature提示
    这是正常现象:jwt.io默认使用Microsoft Graph的公钥验证签名,但自定义API的token需要使用你的Azure租户对应的公钥验证。你可以从租户的OpenID配置端点获取公钥地址:

    https://login.microsoftonline.com/{你的租户ID}/v2.0/.well-known/openid-configuration
    

    提取jwks_uri地址后,在jwt.io的「Verify Signature」栏手动填入该公钥即可验证通过。

  5. 确认Azure权限配置

    • 确保客户端应用已被授予自定义API的AccessAsUser权限,且完成了管理员同意(针对企业租户应用)
    • 自定义API的「Expose an API」中,已正确添加AccessAsUser scope,且状态为「Enabled」

验证测试

完成上述修改后,重新获取token并调用你的自定义API,此时Invalid audience错误应被解决,token可正常通过API的验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:40:16