Flutter通过aad_oauth调用MS Graph API User.Read接口遇权限不足错误
解决Microsoft Graph API权限不足问题
排查与修复步骤:
匹配权限类型与认证流程
你在Azure AD添加的权限如果是应用权限(Application permissions),但当前用的是用户登录的委托流程(Delegated permissions),权限会直接失效。请确认添加的是委托权限,且权限对应你要调用的API(比如获取用户基础数据用User.Read)。检查管理员同意状态
若添加的权限旁标注“需要管理员同意”,必须在Azure AD管理中心点击「授予管理员同意」按钮——普通用户登录后无法自动获取这类权限的访问凭证,必须完成管理员同意操作。修正Token请求的Scope参数
获取access token时,必须指定Graph API的具体权限scope,不能只使用openid/profile这类基础OIDC scope:- 调用获取当前用户信息的API,scope需包含
https://graph.microsoft.com/User.Read
检查你的aad_oauth配置,确保scope参数包含所需的Graph权限。
- 调用获取当前用户信息的API,scope需包含
验证Token的权限内容
用本地JWT解析工具(比如jwt.ms,可离线使用)解析获取到的access token,查看scp字段是否包含目标权限(如User.Read)。如果scp字段无对应权限,说明token请求时的scope配置错误,或权限未完成同意流程。核对HTTP请求头格式
确保请求的Authorization头格式完全正确:Authorization: Bearer {你的access token}注意
Bearer后必须有一个空格,token不能包含多余换行或空格。
示例修正参考:
如果你的aad_oauth原scope配置是['openid', 'profile'],修改为:
final config = AadOAuthConfig( // 其他配置项... scope: 'openid profile https://graph.microsoft.com/User.Read', );
修改后重新登录获取token,再调用https://graph.microsoft.com/v1.0/me端点测试。
内容的提问来源于stack exchange,提问作者ception
相关产品推荐
相关产品推荐

