【问题标题】:ADAL For Java on Mobile Devices: Prompt is Not AllowedADAL 用于移动设备上的 Java:不允许提示
【发布时间】:2017-02-07 05:30:15
【问题描述】:

我有一个使用 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,截至本文最新版本)。我确实看到有一个 ADAL for Cordova 库包含这个可能有效的方法。但是,它使用 NodeJS,如果可能的话,我更愿意坚持使用 Java 解决方案。

不胜感激。谢谢。

编辑:我认为主要问题是 ADAL4J 库不支持 AuthenticationContext.tokenCache 属性,也不包括对设备特定 ADAL 实现中的PromptBehavior 选项的支持。

如果属实,我猜我要么必须尝试适用于 Cordova 的 ADAL,要么尝试每个设备的 ADAL SDK。

【问题讨论】:

    标签: java azure adal oracle-maf adal4j


    【解决方案1】:

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

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

    如果只是安卓,你可以直接使用ADAL for Android来做。否则,似乎没有任何现有的库可以直接支持 Java 多平台内的身份验证。希望对您有所帮助。

    【讨论】:

    • 彼得,感谢您的回复。你的理解是正确的。不幸的是,我已经通过 ADAL for Java 库使用 Oauth 2.0 Auth 代码流(注意对身份验证令牌的“/oauth2/authorize”端点的调用)。
    猜你喜欢
    • 1970-01-01
    • 2017-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    相关资源
    最近更新 更多