adal4j Проблема с авторизацией

Привет, я написал приложение Deamon, которое использует активный каталог Microsoft, приложение отлично работает в среде разработки, но в производстве (экземпляр AWS EC2) я получаю эту ошибку:

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 — это ISO.

Это класс, который подключается к активному каталогу:

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;
    }



}

Спасибо.


person Meshredded    schedule 19.07.2018    source источник
comment
Предоставление деталей конфигурации (как для ADAL, так и для AD/AAD) и фрагментов кода, вызывающих исключение, также будет очень полезным. В противном случае ваш вопрос просто не имеет смысла.   -  person astaykov    schedule 19.07.2018
comment
я только что отредактировал вопрос.   -  person Meshredded    schedule 19.07.2018


Ответы (2)


Я только что обнаружил источник этой проблемы, пытаясь подключиться с помощью токена обновления, полученного из сети моей компании.

"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 в моей компании, чтобы иметь специальную учетную запись для аутентификации без двухфакторной аутентификации.

person Meshredded    schedule 20.07.2018

Для потока, который вы используете (resource owner password credential — путем прямого предоставления учетных данных пользователя), вы должны использовать конкретную конечную точку клиента. Это означает, что вы должны изменить:

private final static String AUTHORITY_URL = "https://login.microsoftonline.com/common/";

to

private final static String AUTHORITY_URL = "https://login.microsoftonline.com/<tenant_id>/";

Где вы можете использовать либо свой домен клиента (например, yourdomain.onmicrosoft.com), либо tenant_id в <tenant_id>.

person astaykov    schedule 19.07.2018
comment
Привет, у меня все еще возникла та же проблема, когда я ввел ‹tenant_id› или mydomain.onmicrosoft.com [java.lang.Exception: сервер вернул ошибку в RSTR — ErrorCode: FailedAuthentication: FaultMessage: MSIS7068: accès refusé.] - person Meshredded; 20.07.2018
comment
И поток, который я использую, (ресурс, clientId, имя пользователя, пароль, обратный вызов), PS: все отлично работает в среде dev, проблема только в prod env. - person Meshredded; 20.07.2018