2017-04-06 8 views
0

ここでは、AzureデータカタログのData Lake Storeからデータ資産を登録しようとしています。 私はその後、私はトークンJavaを使用してAzureデータカタログのトークンを認証して取得する

//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();} 

を取得するために使用しています。しかし、私のように、例外を取得しています

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

コード以下のように、ヘッダに設定されますAzureのデータカタログの認証トークンを取得しようとしています
{ "しましたerror_description": "AADSTS50001:https://abc.onmicrosoft.com/somecode/login/aadという名前のアプリケーションがで見つかりませんでした

の元com.microsoft.aad.adal4j.AuthenticationExceptionの下に示しますtenant_idという名前のテナント。
これは、アプリケーションがテナントの管理者によってインストールされていないか、またはテナントの任意のユーザーが同意していない場合に発生します。
誤ったテナントに認証要求を送信した可能性があります。

トレースID:

相関IDをsome_id:some_id

タイムスタンプ:2017年4月6日09:57:01Z」、 "エラー": "invalid_resource"} com.microsoftで

.aad.adal4j.AdalTokenRequest.executeOAuthRequestAndProcessResponse com.microsoft.aad.adal4j.AuthenticationContext.acquireTokenCommon(AuthenticationContext.java:816)で(AdalTokenRequest.java:107)

com.microsoft.aad.adal4j.AuthenticationContext $ 1.callでcom.microsoft.aad.adal4j.AuthenticationContext.access $ 100(AuthenticationContext.java:64)

(AuthenticationContext.java:172)

java.util.concurrent.FutureTask.runでcom.microsoft.aad.adal4j.AuthenticationContext $ 1.call(AuthenticationContext.java:161)

(FutureTask.java:266)で

java.utilのでは。 concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

java.lang.Thread.runでjava.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)

(Thread.java:745)

*****で

************ EDIT ****************** ありがとう!しかし、私は "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のアプリ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"である必要があります。

関連する問題