Flutter用azure_ad_authentication遇InvalidAuthenticationToken错误求助
问题解决:Azure AD认证token提示Invalid AuthenticationToken(Invalid audience)
核心问题定位
你的问题根源在于scope格式不完整,导致获取的token受众(aud)不匹配自定义API的要求,同时jwt.io的签名验证异常是因为公钥不匹配导致的误报。
分步解决方案
修正Scope格式
Azure AD中自定义API的scope必须包含API的Client ID,正确格式应为:api://{你的自定义API的Client ID}/AccessAsUser你当前使用的
api:///AccessAsUser缺少了API的Client ID,这会导致token的受众指向默认的Microsoft Graph,而非你的自定义API,从而触发Invalid audience错误。更新认证请求的Scope参数
在Flutter代码中,将请求token的scope数组改为完整格式:final List<String> scopes = [ 'api://xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx/AccessAsUser' ];替换其中的
xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx为你自定义API的Client ID。验证Token的受众与权限
重新登录获取token后,通过本地控制台解码确认:aud字段值等于自定义API的Client ID(或api://{Client ID})scp字段包含AccessAsUser权限
关于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」栏手动填入该公钥即可验证通过。确认Azure权限配置
- 确保客户端应用已被授予自定义API的
AccessAsUser权限,且完成了管理员同意(针对企业租户应用) - 自定义API的「Expose an API」中,已正确添加
AccessAsUserscope,且状态为「Enabled」
- 确保客户端应用已被授予自定义API的
验证测试
完成上述修改后,重新获取token并调用你的自定义API,此时Invalid audience错误应被解决,token可正常通过API的验证。
内容的提问来源于stack exchange,提问作者Harish
相关产品推荐
相关产品推荐

