Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用graph api对Azure AD中的来宾用户进行身份验证_Azure_Azure Active Directory_Azure Ad Graph Api_Adal4j - Fatal编程技术网

使用graph api对Azure AD中的来宾用户进行身份验证

使用graph api对Azure AD中的来宾用户进行身份验证,azure,azure-active-directory,azure-ad-graph-api,adal4j,Azure,Azure Active Directory,Azure Ad Graph Api,Adal4j,我正在尝试使用Azure AD存储用户记录来验证web应用程序中的用户。为了对用户进行身份验证,我正在使用ADAL4J API()。我正在使用AuthenticationContext.acquireToken()方法为用户获取令牌。这适用于我的目录中的本地用户,但不适用于被邀请到该目录的来宾用户 在验证来宾用户时,我遇到一个错误:“要登录此应用程序,必须将帐户添加到目录”。但是,我确信该用户已成功添加到通过Azure门户看到的目录中。此外,我还使用graph API验证了这一点,我可以在目录的

我正在尝试使用Azure AD存储用户记录来验证web应用程序中的用户。为了对用户进行身份验证,我正在使用ADAL4J API()。我正在使用AuthenticationContext.acquireToken()方法为用户获取令牌。这适用于我的目录中的本地用户,但不适用于被邀请到该目录的来宾用户

在验证来宾用户时,我遇到一个错误:“要登录此应用程序,必须将帐户添加到目录”。但是,我确信该用户已成功添加到通过Azure门户看到的目录中。此外,我还使用graph API验证了这一点,我可以在目录的用户列表中看到来宾用户

因此,问题是如何通过代码(而不是重定向到Azure UI)对web应用程序中的来宾用户进行身份验证

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

 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;
 }
私有静态身份验证结果getAccessTokenFromUserCredentials(
字符串用户名、字符串密码)引发异常{
AuthenticationContext上下文=null;
AuthenticationResult=null;
ExecutorService=null;
试一试{
服务=Executors.newFixedThreadPool(1);
上下文=新的AuthenticationContext(“https://login.windows.net/",虚假,送达),;
Future=context.acquireToken(
"https://graph.windows.net,客户端ID,用户名,密码,
无效);
结果=future.get();
}捕获(例外e){
e、 printStackTrace();
}最后{
service.shutdown();
}
如果(结果==null){
抛出新ServiceUnavailableException(
“验证结果为空”);
}
返回结果;
}

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

我建议您在整个过程中专门调用租户的登录端点,看看这是否解决了您的问题


让我知道这是否有帮助

您是否可以共享您为用户构建的登录URL的详细信息?您使用的是“公共”端点还是租户特定的端点?如何添加来宾用户?我通过Azure UI添加了来宾用户,之后我通过电子邮件收到了该用户的邀请。一旦我完成了邀请中的说明,用户就被添加到我的目录中。我正在使用“公共”端点。我的身份验证代码如下所示:context=newauthenticationcontext(“”,false,service);Future“,CLIENT_ID,username,password,null);在这个代码片段中,什么是“service”…您还应该使用端点“login.microsoftonline.com”。您输入用户名和密码以获取令牌,而不是遵循?@ShawnTabrizi“授权代码授予流”是否有特定的原因“解释如何在交互模式下使用Azure UI进行用户身份验证。我的需求需要我使用应用程序的登录页面进行身份验证,其中我使用ADAL4J api对用户凭据(用户名和密码)进行身份验证,如下所述:““服务”是用于定义线程池的ExecutorService对象。我试图指向“login.microsoftonline.com”,但得到了完全相同的错误。谢谢Shawn,但这对我不起作用。我尝试使用租户名称而不是common,并收到错误消息“要登录此应用程序,必须将帐户添加到目录”。如果是“common”,则错误消息显示“要登录此应用程序,必须将帐户添加到graph.windows.net目录”。错误消息显示“需要添加到graph.windows.net目录”没有任何意义,并且告诉我您的代码中存在某种错误。您需要在此处提供源代码,以帮助您进一步处理从其他Azure AD租户邀请的来宾用户的情况,而不是任何租户中不存在的来宾用户的情况(例如:gmail账户)。来宾用户必须具有某种AAD支持,否则他们根本不是我们系统中的用户。随机Gmail帐户不能用于AAD身份验证。在我看来,您正在寻找的是我们的消费者身份系统。谢谢Shawn,但B2C涉及用户注册,我使用B2B是因为我想控制将成为您的用户使用我的应用程序,我不希望用户进行注册。如果您检查我发布的问题(),graph API请求进行与密码相关的更改(如重置密码和更改密码)对于从另一个租户邀请的用户不起作用。这是因为另一个租户存储了他们的密码并对其进行身份验证吗?