使用Microsoft Graph Java SDK时Scope配置错误及正确配置咨询
解决AADSTS1002012错误及客户端凭证流的Scope设置问题
首先得理清两个核心问题:
- 你使用的**ClientSecretCredential(客户端凭证流)**是服务到服务的认证方式,不存在用户上下文,所以根本没法调用
graphClient.me()——这个接口是用来获取当前登录用户数据的,客户端凭证流里没有"当前用户",要访问用户数据得换成graphClient.users("{user-id}")指定具体用户ID。 - 客户端凭证流的Scope必须遵循
资源标识符/.default的格式,针对Microsoft Graph来说,正确的Scope就是https://graph.microsoft.com/.default,而openid、offline_access这类属于Delegated权限(是给有用户参与的认证流用的,比如授权码流),不能在客户端凭证流里使用。
正确的Scope配置示例(Java SDK)
List<String> scopes = Arrays.asList("https://graph.microsoft.com/.default"); ClientSecretCredential credential = new ClientSecretCredentialBuilder() .clientId("你的客户端ID") .clientSecret("你的客户端密钥") .tenantId("你的租户ID") .build(); GraphServiceClient<Request> graphClient = GraphServiceClient.builder() .authenticationProvider(new AzureIdentityAuthenticationProvider(credential)) .buildClient();
相关官方规则说明
官方明确规定:客户端凭证流仅支持应用权限(Application Permissions),必须用https://graph.microsoft.com/.default作为Scope,这个值会让Azure AD返回应用注册时配置的所有已授权应用权限的令牌。另外,要调用用户相关接口,你得先在Azure AD应用注册里添加对应的应用权限(比如User.Read.All),并完成管理员同意操作。
内容的提问来源于stack exchange,提问作者Ihsan Haikal
相关产品推荐
相关产品推荐

