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

如何使用Java凭证读取Azure AD用户的CompanyName属性

解决AADSTS7000218错误:获取Azure AD用户CompanyName属性

错误原因

AADSTS7000218错误的核心原因是:使用用户名密码流(ROPc)时,机密客户端必须提供客户端凭证。你的应用注册已创建Client Secret,属于机密客户端,但代码中仅传入了客户端ID、租户ID、用户名和密码,未携带Client Secret,导致Azure AD拒绝令牌请求。

解决方案

1. 修改代码添加Client Secret

在代码中加入Client Secret配置,并在UsernamePasswordCredentialBuilder中添加该参数:

import java.util.Arrays;
import java.util.List;

import com.azure.identity.UsernamePasswordCredential;
import com.azure.identity.UsernamePasswordCredentialBuilder;
import com.microsoft.graph.authentication.TokenCredentialAuthProvider;
import com.microsoft.graph.models.User;
import com.microsoft.graph.requests.GraphServiceClient;

public class azureADUserAuth {
    final String clientId = "YOUR_CLIENT_ID";
    final String tenantId = "YOUR_TENANT_ID";
    final String userName = "YOUR_USER_NAME";
    final String password = "YOUR_PASSWORD";
    final String clientSecret = "YOUR_CLIENT_SECRET"; // 新增Client Secret配置
    final List<String> scopes = Arrays.asList("User.Read"); 

    public static void main (String[] args) {
        try {
            azureADUserAuth auth = new azureADUserAuth(); // 实例化类以访问成员变量
            UsernamePasswordCredential credential = new UsernamePasswordCredentialBuilder()
                .clientId(auth.clientId)
                .tenantId(auth.tenantId)
                .username(auth.userName)
                .password(auth.password)
                .clientSecret(auth.clientSecret) // 添加Client Secret
                .build();

            if (null == auth.scopes || null == credential) {
                throw new Exception("Unexpected error");
            }
            TokenCredentialAuthProvider authProvider = new TokenCredentialAuthProvider(auth.scopes, credential);
            GraphServiceClient graphClient = GraphServiceClient.builder().authenticationProvider(authProvider).buildClient();
            
            User me = graphClient.me().buildRequest().get();
            System.out.println(me.companyName);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

2. 确认Azure AD应用配置

  • 确保应用注册已创建有效的Client Secret,且未过期
  • 启用用户名密码流:在应用注册的「身份验证」页面,展开「高级设置」,将「允许使用用户名密码流」设置为「是」
  • 确认已添加User.Read委派权限,并完成管理员同意(若应用需访问租户内多个用户)

额外注意事项

  • 用户名密码流不支持启用了多因素认证(MFA)的用户,若目标用户开启MFA,需改用其他认证方式
  • 该流仅适用于内部用户(Azure AD租户内用户),无法用于外部用户或个人Microsoft账户

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:20:56