首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >adal4j身份验证问题

adal4j身份验证问题
EN

Stack Overflow用户
提问于 2018-07-19 16:49:30
回答 2查看 1.3K关注 0票数 0

您好,我写了一个使用微软活动目录的守护应用程序,该应用程序在开发环境中运行良好,但在生产环境(亚马逊网络服务EC2实例)中,我收到以下错误:

代码语言:javascript
复制
java.lang.Exception: Server returned error in RSTR - ErrorCode: FailedAuthentication : FaultMessage: MSIS7068 : accès refusé.
        at com.microsoft.aad.adal4j.WSTrustResponse.parse(WSTrustResponse.java:103) ~[adal4j-1.0.0.jar:1.0.0]
        at com.microsoft.aad.adal4j.WSTrustRequest.execute(WSTrustRequest.java:69) ~[adal4j-1.0.0.jar:1.0.0]
        at com.microsoft.aad.adal4j.AuthenticationContext.processPasswordGrant(AuthenticationContext.java:790) ~[adal4j-1.0.0.jar:1.0.0]
        at com.microsoft.aad.adal4j.AuthenticationContext.access$000(AuthenticationContext.java:63) ~[adal4j-1.0.0.jar:1.0.0]
        at com.microsoft.aad.adal4j.AuthenticationContext$1.call(AuthenticationContext.java:129) [adal4j-1.0.0.jar:1.0.0]
        at com.microsoft.aad.adal4j.AuthenticationContext$1.call(AuthenticationContext.java:119) [adal4j-1.0.0.jar:1.0.0]
        at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_171]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_171]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_171]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_171]

2018-07-19 08:40:02.829 ERROR 5072 --- [nio-8083-exec-1] f.a.agent.reservation.utils.OAuth        : java.util.concurrent.ExecutionException: java.lang.Exception: Server returned error in RSTR - ErrorCode: FailedAuthentication : FaultMessage: MSIS7068 : accès refusé.

我不明白这是怎么回事,因为Dev和Prod env是ISO。

这是连接到active directory的类:

代码语言:javascript
复制
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResult;


import lombok.extern.java.Log;

@Log
public class OAuth {
    private static String TOKEN = null;
    private final static String AUTHORITY_URL = "https://login.microsoftonline.com/common/";
    private final static String GRAPH_URL = "https://graph.microsoft.com";
    private final static String CLIENT_ID = "*****";
    private final static String USERNAME = "*****";
    private final static String PASSWORD = "*****";

    public static final String getToken() throws Exception {
        if (null == TOKEN) {
            AuthenticationContext context;
            AuthenticationResult result = null;
            ExecutorService service = null;
            log.info("Auth with : " + USERNAME);
            try {
                service = Executors.newFixedThreadPool(1);
                context = new AuthenticationContext(AUTHORITY_URL, false, service);
                Future<AuthenticationResult> future = context.acquireToken(GRAPH_URL, CLIENT_ID, USERNAME, PASSWORD, null);
                result = future.get();
            }catch (Exception e){
                log.severe(e.toString());
            } finally {
                service.shutdown();
            }

            if (result == null) {
                log.severe("AUTH FAILLURE");
            } else {
                TOKEN = result.getAccessToken();
            }
        }
        return TOKEN;
    }



}

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-20 20:55:18

我只是通过尝试使用从我公司的网络获得的刷新令牌进行连接,从而找到了这个问题的根源。

代码语言:javascript
复制
"error_description":"AADSTS50076: Due to a configuration change made by your administrator, or because you moved to a new location, you must use multi-factor authentication to access '00000003-0000-0000-c000-000000000000'.\r\nTrace ID: xxxxx\r\nCorrelation ID: xxxxxx b\r\nTimestamp: 2018-07-20 12:34:45Z","error":"interaction_required"

因此,我知道两个因素的身份验证不需要从我公司的网络内部,但它是需要在它的外部。

我必须联系我公司的office 365管理员,才能有专门的帐户进行身份验证,而不需要两个因素的身份验证。

票数 1
EN

Stack Overflow用户

发布于 2018-07-19 23:19:22

对于您正在使用的流(resource owner password credential -通过直接提供用户凭据),您必须使用特定于租户的端点。这意味着,你必须改变:

代码语言:javascript
复制
private final static String AUTHORITY_URL = "https://login.microsoftonline.com/common/";

代码语言:javascript
复制
private final static String AUTHORITY_URL = "https://login.microsoftonline.com/<tenant_id>/";

您可以在其中使用租户域(即yourdomain.onmicrosoft.com)或<tenant_id>中的tenant_id。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51418223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档