0

我有一个使用 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。

4

1 回答 1

0

根据您的描述,根据我的理解,我认为您想使用 Java 中的 Oracle MAF 创建一个移动应用程序跨平台,如 iOS/Android/etc。

因此,根据我的经验,适合您 Java 需求的解决方案是使用 OAuth2 REST API 通过 Azure AD 上的 Java HTTP 客户端进行身份验证,请参阅官方教程OAuth 2.0 Authorization Code Flow

如果只是针对 Android,您可以直接使用ADAL for Android来执行此操作。否则,似乎没有任何现有的库可以直接支持 Java 中的多平台内的身份验证。希望能帮助到你。

于 2017-02-06T08:38:56.703 回答