Java 使用UsernamePasswordCredential提供程序列出Azure AD

Java 使用UsernamePasswordCredential提供程序列出Azure AD,java,azure,azure-active-directory,azure-web-app-service,microsoft-graph-sdks,Java,Azure,Azure Active Directory,Azure Web App Service,Microsoft Graph Sdks,我正在使用UsernamePasswordCredential提供程序连接到AAD,并使用msgraph sdk java()获取de用户,代码如下: final UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder() .clientId("client_id")

我正在使用UsernamePasswordCredential提供程序连接到AAD,并使用msgraph sdk java()获取de用户,代码如下:

            final UsernamePasswordCredential usernamePasswordCredential = new UsernamePasswordCredentialBuilder()
                .clientId("client_id")
                .username("user_name")                             
                .password("password")
                .build();

        final TokenCredentialAuthProvider tokenCredentialAuthProvider = new TokenCredentialAuthProvider(Arrays.asList("https://graph.microsoft.com/.default"), usernamePasswordCredential);

        final GraphServiceClient graphClient =
          GraphServiceClient
            .builder()
            .authenticationProvider(tokenCredentialAuthProvider)
            .buildClient();

        UserCollectionPage userCollectionpage = graphClient.users().buildRequest().get();
我收到以下错误:

java.io.IOException:java.util.concurrent.ExecutionException:com.azure.core.exception.ClientAuthenticationException:无法获取具有用户名和密码的令牌


你知道我是否需要在azure active directory中配置一些东西吗?

你的问题已经通过评论解决了。将其作为结束线程的答案发布:

  • 确保您的帐户不是个人帐户

  • 确保启用
    允许公共客户端流

  • 使用msal4j库和PublicClientApplication类获取带有用户名、密码和作用域的令牌

  • 用户是否启用了MFA?用户是否禁用了MFA?您的代码看起来不错。但是,如果您只需要在Azure AD中使用,您可以尝试客户端凭据流。此外,
    用户名/密码流
    不支持个人帐户。即使个人帐户被邀请到Azure AD租户,也不受支持。要使用此流,必须使用特定于租户的端点
    (https://login.microsoftonline.com/{TenantId\u或\u Name})
    。此外,出于安全原因,不建议使用此流。1。确保您的帐户不是个人帐户。2.确保启用
    允许公共客户端流
    。3.使用msal4j库和PublicClientApplication类获取带有用户名、密码和作用域的令牌。感谢分享,我已将其添加到答案中。