ここでは、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();}
この問題を解決する方法を教えてください。
ありがとうございました。
ありがとうございます!しかし、私はそれを試しましたが、依然としてサーバーは不正な要求として応答します。問題の詳細を追加しました –