ADAL для Java на мобильных устройствах: приглашение не разрешено

У меня есть Java-программа, использующая ADAL4J, которая отлично работает на немобильных устройствах, но при развертывании на любых мобильных устройствах через Oracle MAF (которая развертывается как Cordova, HTML5, CSS) происходит сбой в методе AuthenticationContext.

Ошибка:

 com.microsoft.aad.adal.AuthenticationException: Prompt is not allowed and failed to get token:

Вот основной код:

service = Executors.newFixedThreadPool(1);
String url = AUTHORIZATION_ENDPOINT + tenantId + "/oauth2/authorize";
//Next line is where it fails
authContext = new AuthenticationContext(url, false, service);
Future<AuthenticationResult> future =
         authContext.acquireToken(ARM_ENDPOINT, clientId, username, credential, null);
result = future.get();
System.out.println("Access Token - " + result.getAccessToken());
System.out.println("ID Token - " + result.getIdToken());

Основываясь на проведенном мной исследовании, кажется, что вместо этого мне может потребоваться использовать метод AcquireTokenSilent, однако этот метод не существует в библиотеке ADAL для Java (с использованием ADAL4J 1.1.3, самой последней на момент публикации). Я видел, что существует ADAL for Cordova библиотека, содержащая этот метод, который может работать. Однако при этом используется NodeJS, и я бы предпочел, если это возможно, придерживаться решения Java.

Был бы признателен за любую помощь. Спасибо.

РЕДАКТИРОВАТЬ: я думаю, что основная проблема заключается в том, что библиотека ADAL4J не поддерживает свойство AuthenticationContext.tokenCache и не включает поддержку PromptBehavior, который присутствует в реализациях ADAL для конкретных устройств.

Если это правда, думаю, мне придется либо попробовать ADAL для Cordova, либо ADAL SDK для каждого устройства.


person SoonersBaby    schedule 03.02.2017    source источник


Ответы (1)


Согласно вашему описанию, исходя из моего понимания, я думаю, вы хотите создать кроссплатформенное мобильное приложение, такое как iOS/Android/и т. д., с использованием Oracle MAF в Java.

Итак, по моему опыту, решение, подходящее для ваших нужд в Java, — это использование REST API OAuth2 для аутентификации через HTTP-клиент Java в Azure AD. См. официальное руководство Поток кода авторизации OAuth 2.0.

Если только для Android, вы можете напрямую использовать ADAL для Android, чтобы сделать тот. В противном случае кажется, что не существует какой-либо существующей библиотеки для прямой поддержки аутентификации в рамках многоплатформенности в Java. Надеюсь, поможет.

person Peter Pan    schedule 06.02.2017
comment
Петр, спасибо за ответ. Ваше понимание правильное. К сожалению, я уже использую поток кода аутентификации Oauth 2.0 через библиотеку ADAL для Java (обратите внимание на вызов конечной точки /oauth2/authorize для токена аутентификации). - person SoonersBaby; 06.02.2017