我有一个使用 ADAL4J 的 Java 程序,它在非移动设备上运行良好,但是当通过 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 for Java 库中不存在此方法(使用 ADAL4J 1.1.3,截至本文最新版本)。我确实看到有一个适用于 Cordova 的 ADAL库,其中包含可能有效的方法。但是,它使用 NodeJS,如果可能的话,我更愿意坚持使用 Java 解决方案。
将不胜感激任何帮助。谢谢。
编辑:我认为主要问题是 ADAL4J 库不支持 AuthenticationContext.tokenCache 属性,也不包括对设备特定 ADAL 实现中存在 的PromptBehavior选项的支持。
如果属实,我猜我要么必须尝试适用于 Cordova 的 ADAL,要么尝试每个设备的 ADAL SDK。