此处我试图从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();}
请帮我解释一下如何解决这个问题。
谢谢。
谢谢!但是,我尝试过,但仍然是服务器响应未经授权的请求。我已经添加了关于这个问题的更多细节 –