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

Java调用Microsoft Graph访问OneDrive报错AADSTS70000121问题咨询

问题根因

报错核心是兑换授权码环节未显式指定微软身份平台的/common鉴权端点。你使用的AuthorizationCodeCredential默认会指向仅支持工作/学校账户的/organizations鉴权端点,当你通过/common授权端点拿到个人微软账户(MSA,如outlook.com、live.com账号)返回的授权码时,用组织专属端点兑换令牌就会触发AADSTS70000121错误。
另外代码存在隐性配置问题:授权阶段申请的是委托类权限,兑换令牌时却使用了.default静态权限范围,个人账号场景下极易触发权限不匹配问题。

修复方案
  • 构建AuthorizationCodeCredential实例时,显式指定鉴权主机为https://login.microsoftonline.com/common,同时兼容个人微软账户、工作/学校账户两类身份。如果仅需要支持个人微软账户,也可以将鉴权地址替换为https://login.microsoftonline.com/consumers
  • 替换兑换令牌时传入的权限范围配置,移除.default配置,和授权阶段申请的委托权限保持一致即可
  • 前置检查:确认Azure AD应用注册时,已将支持的账户类型设置为「任何组织目录中的账户和个人Microsoft账户」,否则个人账号本身无法完成授权流程
修正后的核心代码
import java.util.Arrays;
import java.util.List;

// 权限配置与授权阶段保持一致,移除.default配置
List<String> scopes = Arrays.asList(
        "openid",
        "Files.Read",
        "Files.ReadWrite",
        "Contacts.Read",
        "offline_access"
);

AuthorizationCodeCredential authCodeCredential = new AuthorizationCodeCredentialBuilder()
        .clientId(CLIENT_ID)
        .clientSecret(CLIENT_SECRET)
        .authorizationCode(authorizationCode)
        .redirectUrl(REDIRECT_URL)
        // 显式指定/common鉴权端点,支持个人微软账号
        .authorityHost("https://login.microsoftonline.com/common")
        .build();

TokenCredentialAuthProvider tokenCredAuthProvider = new TokenCredentialAuthProvider(scopes, authCodeCredential);
GraphServiceClient graphClient = GraphServiceClient.builder()
        .authenticationProvider(tokenCredAuthProvider)
        .buildClient();

User me = graphClient.me()
        .buildRequest()
        .get();

提示:个人微软账户的令牌兑换不支持.default权限范围,必须明确传入实际需要的委托权限,否则会额外触发权限校验错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:45:37