使用图形API在Azure AD中验证来宾用户

时间:2017-01-30 11:11:44

标签: azure azure-active-directory azure-ad-graph-api adal4j

我正在尝试使用Azure AD对我的Web应用程序中的用户进行身份验证来存储用户记录。为了验证用户,我使用的是ADAL4J API(https://github.com/AzureAD/azure-activedirectory-library-for-java)。我使用AuthenticationContext.acquireToken()方法获取用户的令牌。这适用于我的目录中的本地用户,但不适用于受邀访问该目录的访客用户。

在验证访客用户时,我收到错误消息:"要登录此应用程序,必须将帐户添加到目录" 。但是,我确信用户已成功添加到通过Azure门户看到的目录中。此外,我使用图形API验证了相同的内容,我可以在目录中的用户列表中看到来宾用户。

所以问题是如何通过代码在我的Web应用程序中验证访客用户(而不是通过重定向到Azure UI)?

编辑: 这是我传递用户的用户名和密码的方法:

 private static AuthenticationResult getAccessTokenFromUserCredentials(
    String username, String password) throws Exception {
    AuthenticationContext context = null;
    AuthenticationResult result = null;
    ExecutorService service = null;
    try {
         service = Executors.newFixedThreadPool(1);
         context = new AuthenticationContext("https://login.windows.net/<tenant_name>", false, service);
         Future<AuthenticationResult> future = context.acquireToken(
            "https://graph.windows.net", CLIENT_ID, username, password,
            null);
         result = future.get();
     } catch(Exception e){
        e.printStackTrace();
     } finally {
         service.shutdown();
     }

     if (result == null) {
         throw new ServiceUnavailableException(
                 "authentication result was null");
     }
     return result;
 }

1 个答案:

答案 0 :(得分:1)

根据您提供的信息,我觉得这里的问题与登录端点有关。请记住,公共端点使用登录用户来帮助“猜测”要对哪个租户端点进行身份验证。如果您正在做更多棘手的事情,例如访客帐户,那么公共端点很可能无法找出所有正确的详细信息。

我建议您在整个过程中专门致电租户的登录终端,看看是否能解决您的问题。

请告诉我这是否有帮助!