Java 使用UsernamePasswordCredential提供程序列出Azure AD
我正在使用UsernamePasswordCredential提供程序连接到AAD,并使用msgraph sdk java()获取de用户,代码如下: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")
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中配置一些东西吗?你的问题已经通过评论解决了。将其作为结束线程的答案发布:
允许公共客户端流
用户是否启用了MFA?用户是否禁用了MFA?您的代码看起来不错。但是,如果您只需要在Azure AD中使用,您可以尝试客户端凭据流。此外,
用户名/密码流
不支持个人帐户。即使个人帐户被邀请到Azure AD租户,也不受支持。要使用此流,必须使用特定于租户的端点(https://login.microsoftonline.com/{TenantId\u或\u Name})
。此外,出于安全原因,不建议使用此流。1。确保您的帐户不是个人帐户。2.确保启用允许公共客户端流
。3.使用msal4j库和PublicClientApplication类获取带有用户名、密码和作用域的令牌。感谢分享,我已将其添加到答案中。