2017-04-06 143 views
0

此處我試圖從Data Lake Store中的數據資產註冊到Azure數據目錄中。 我試圖獲得Azure的數據目錄,我會隨後在頭設置如下使用Java對Azure數據目錄進行身份驗證並獲取令牌

request.setRequestProperty("Authorization","Bearer "+accesstoken); 

代碼我使用獲得令牌

//This method sends request and gets the reponse 
public static String SetRequestAndGetResponse(HttpsURLConnection request, String payload) 
{ 
    String accesstoken=null; 
    ExecutorService service = null; 

    Future<AuthenticationResult> FutureResult; 
    AuthenticationResult result; 
    AuthenticationCallback callback = null; 

    //Creating the credential object for DataCatalog with Client ID and Client secret picked up from the vault 

    ClientCredential credential = new ClientCredential("client_ID", "client_secret"); 

    try 
    { 
     service = Executors.newFixedThreadPool(1); 
     AuthenticationContext context = new AuthenticationContext("https://login.windows.net/tenant_ID/oauth2/token",true,service); 

     /* 
     * getting the authentication result object using the App ID URI from Azure AD as suggested in 
     * 
     * https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code 
     */ 

     FutureResult = context.acquireToken("App ID URI from Azure AD/login/aad", credential,null); 
     while(!(FutureResult.isDone())) 
     {} 
     accesstoken=FutureResult.get().getAccessToken(); 
     //System.out.println("result "+accesstoken); 
    } 
    catch(Exception e) 
    {System.out.println("ex "+e.getMessage()); 
    e.printStackTrace();} 

但是,我得到例外的認證令牌如下圖所示

前com.microsoft.aad.adal4j.AuthenticationException:
{ 「ERROR_DESCRIPTION」:「AADSTS50001:應用程序命名爲https://abc.onmicrosoft.com/somecode/login/aad不是在發現名爲tenant_id的租戶。
如果應用程序尚未由租戶的管理員安裝或由租戶中的任何用戶同意,則可能會發生這種情況。
您可能已將驗證請求發送給錯誤的承租人。

跟蹤ID:SOME_ID

相關ID:SOME_ID

時間戳:2017年4月6日09:57:01Z」, 「錯誤」: 「invalid_resource」}

在com.microsoft .aad.adal4j.AdalTokenRequest.executeOAuthRequestAndProcessResponse(AdalTokenRequest.java:107)

在com.microsoft.aad.adal4j.AuthenticationContext.acquireTokenCommon(AuthenticationContext.java:816)

在com.microsoft.aad.adal4j.AuthenticationContext.access $ 100(AuthenticationContext.java:64)

在com.microsoft.aad.adal4j.AuthenticationContext $ 1.call(AuthenticationContext.java:172)

在com.microsoft.aad.adal4j.AuthenticationContext $ 1.call(AuthenticationContext.java:161)

在java.util.concurrent.FutureTask.run(FutureTask.java:266)

在java.util中。 concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617)

在java.lang.Thread.run(Thread.java:745)

***** ************編輯******************* 謝謝!但是,我嘗試使用「https://graph.windows.net」作爲資源URI來使用認證上下文獲取令牌,但仍然是服務器作爲未經授權的請求進行響應。順便說一句,我正在使用下面的代碼片段來創建一個請求對象。

String fullUri = String.format("https://api.azuredatacatalog.com/catalogs/"+catalogName+"/views/tables?api-version=2016-03-30"); 
    URL url = null; 
    try { 
     //sETTING UP url connection to azure data catalog api 
     url = new URL(fullUri); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     System.out.println("Malformed URL Exception"); 
    } 
    HttpsURLConnection request; 
    try { 
     request = (HttpsURLConnection) url.openConnection(); 
     } 
     catch(Exception e){ e.printStackTrace();} 

請幫我解釋一下如何解決這個問題。

謝謝。

回答

0

AuthenticationContext.acquireToken方法的第一個參數應該是圖形資源,而不是來自Azure AD的App ID URI。

請更改代碼,如下行:

FutureResult = context.acquireToken("https://graph.windows.net", credential, null); 

欲瞭解更多信息,請參見:https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-devquickstarts-webapp-java

+0

謝謝!但是,我嘗試過,但仍然是服務器響應未經授權的請求。我已經添加了關於這個問題的更多細節 –

0

這裏是你應該使用什麼:

string authorityUri = "https://login.windows.net/common/oauth2/authorize"; 
AuthenticationContext authContext = new AuthenticationContext(authorityUri); 

此外,該資源串被傳遞到AcquireToken方法應該是「https://api.azuredatacatalog.com」。

相關問題