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

Java Azure App Service调用Microsoft Graph遇/me请求身份验证流错误

解决Azure App Service调用Microsoft Graph /me接口的BadRequest错误

错误原因

/me接口仅支持委托权限认证流,它指向当前已完成身份验证的用户。你当前使用的DefaultAzureCredential属于应用权限流(以服务主体身份发起请求),这种模式下没有绑定具体的登录用户,因此调用/me会触发BadRequest错误。

解决方案

你的App Service已启用Easy Auth,可直接利用Easy Auth注入的用户ID令牌发起委托权限请求,具体步骤如下:

  1. 获取Easy Auth注入的用户令牌
    Easy Auth会将当前登录用户的ID令牌注入到请求头X-MS-TOKEN-AAD-ID-TOKEN中,从请求中读取该令牌即可。

  2. 使用用户令牌初始化GraphServiceClient
    替换原有的DefaultAzureCredential方式,用获取到的用户令牌构建身份验证提供器:

// 从请求头读取Easy Auth注入的ID令牌
String idToken = request.getHeader("X-MS-TOKEN-AAD-ID-TOKEN");

// 实现自定义身份验证提供器,返回用户令牌
IAuthenticationProvider authProvider = new IAuthenticationProvider() {
    @Override
    public CompletableFuture<String> getAuthorizationTokenAsync(URL requestUrl) {
        return CompletableFuture.completedFuture(idToken);
    }
};

// 构建GraphServiceClient实例
GraphServiceClient graphClient = GraphServiceClient.builder()
        .authenticationProvider(authProvider)
        .buildClient();

// 调用/me接口获取当前用户信息
User me = graphClient.me().buildRequest().get();

额外注意事项

  • 确保你的应用注册已添加委托权限(例如User.Read),并完成管理员同意(若权限需要)。
  • Easy Auth已完成用户身份验证流程,无需手动处理登录逻辑,直接使用注入的令牌即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:42:44