У меня есть 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 для каждого устройства.