无法使用adal4j Api获得Azure令牌

时间:2018-09-11 07:13:16

标签: java spring azure adal adal4j

我试图从Microsoft图形中读取用户配置文件/图像,并使用adal4j-1.5.0.jar生成azure令牌,以便基于令牌我可以调用图形API / Microsoft delve。

我在以下代码中遇到问题。很简单地移动到以下行之后的final块而不会生成令牌或任何异常。 “未来的未来= context.acquireToken(resourceUri,凭据,null);”

String clientId = "clientid";
String clientSecret = "cleintsecret";
String resourceUri = "https://graph.microsoft.com/v1.0/me";

String redirectUri = "http://localhost:9082/contextroot";

String authorityUri ="https://login.microsoftonline.com/{tenent id}/oauth2/authorize";


AuthenticationContext context = null;
AuthenticationResult result = null;
ExecutorService service = null;
try {
    service = Executors.newFixedThreadPool(1);
    context = new AuthenticationContext(authorityUri, false, service);
    ClientCredential credential = new ClientCredential(clientId,clientSecret);

    Future<AuthenticationResult> future = context.acquireToken(resourceUri, credential, null);



    result = future.get();
}
finally {
    service.shutdown();
}

1 个答案:

答案 0 :(得分:0)

似乎还没有下载adal4j-1.5.0的某些依赖项,请从您的项目中检查jar包文件。根据我的测试是否使用adal4j 1.5.0。 我发现项目中缺少adal4j-1.5.0的某些依赖项。然后我无法获得访问令牌。

enter image description here

但是,如果我使用adal4j 1.0.0 ,它对我来说是正确的。如果版本1.0.0是可接受的,则可以将其用作解决方法或手动添加依赖项。

enter image description here

测试演示代码:

 private static final String APP_ID = "clientId";
 private static final String APP_SECRET = "secret key";
 private static final String TENATID = "xxxxx";
 public static void main(String[] args) throws Exception {
 String authority = "https://login.microsoftonline.com/"+TENATID; 
 String resourceUrl = "https://graph.microsoft.com"; //Microsoft graph. AD graph: https://graph.windows.net
 ExecutorService service = Executors.newFixedThreadPool(1);
 AuthenticationContext context = new AuthenticationContext(authority, true, service);
        // Acquire Token
 Future<AuthenticationResult> result = context.acquireToken(
                resourceUrl,
                new ClientCredential(APP_ID, APP_SECRET),
                null
        );
        String token = result.get().getAccessToken();
        System.out.println(token);
    }