2017-02-03 58 views
0

我有一個使用ADAL4J的Java程序,它非常適用於非移動設備,但是通過Oracle MAF部署到任何移動設備(部署爲Cordova,HTML5,CSS ),它在AuthenticationContext方法上失敗。ADAL對於移動設備上的Java:不允許提示

的錯誤是:

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屬性,也不包括支持PromptBehavior選項的設備特定ADAL實現中的主要問題。

如果這是真的,我猜我必須嘗試ADAL for Cordova或每個設備ADAL SDK。

回答

0

根據你的描述,基於我的理解,我認爲你想用Java中的Oracle MAF創建一個類似iOS/Android /等的移動應用程序跨平臺。

所以根據我的經驗,適合您的Java需求的解決方案是使用OAuth2 REST API通過Azure AD上的Java HTTP客戶端進行身份驗證,請參閱官方教程OAuth 2.0 Authorization Code Flow

如果只是針對Android,您可以直接使用ADAL for Android來做到這一點。否則,似乎沒有任何現有的庫可以直接支持Java中的多平臺內的認證。希望能幫助到你。

+0

彼得,謝謝你的回覆。你的理解是正確的。不幸的是,我已經通過ADAL for Java庫使用了Oauth 2.0 Auth代碼流(注意對auth令牌的「/ oauth2/authorize」端點的調用)。 – SoonersBaby