Microsoft Graph API访问令牌验证失败(java)

Microsoft Graph API访问令牌验证失败(java),java,azure,adal,adal4j,Java,Azure,Adal,Adal4j,我正在尝试设置一个本机java应用程序,该应用程序将利用MS Graph的API在使用ADAL4j进行身份验证后访问用户OneDrive。我正在使用库获取我的访问令牌。到目前为止,我有以下代码: import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; imp

我正在尝试设置一个本机java应用程序,该应用程序将利用MS Graph的API在使用ADAL4j进行身份验证后访问用户OneDrive。我正在使用库获取我的访问令牌。到目前为止,我有以下代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import javax.naming.ServiceUnavailableException;

import com.microsoft.aad.adal4j.AuthenticationContext;
import com.microsoft.aad.adal4j.AuthenticationResult;

public class Get {

    private final static String AUTHORITY = "https://login.windows.net/common/oauth2/v2.0/authorize";
    private final static String CLIENT_ID = "29275...011a";
    private final static String RESOURCE = "https://graph.windows.net";


    public static void main(String[] args) throws Exception {

        try (BufferedReader br = new BufferedReader(new InputStreamReader(
            System.in))) {
            System.out.print("Enter username: ");
            String username = br.readLine();
            System.out.print("Enter password: ");
            String password = br.readLine();

            AuthenticationResult result = getAccessTokenFromUserCredentials(
                username, password);
            System.out.println("Access Token - " + result.getAccessToken());
            System.out.println("Refresh Token - " + result.getRefreshToken());
            System.out.println("ID Token - " + result.getIdToken());
            System.out.println("Expires in - " + result.getExpiresAfter());
        }
    }

    private static AuthenticationResult getAccessTokenFromUserCredentials(
        String username, String password) throws Exception {
        AuthenticationContext context = null;
        AuthenticationResult result = null;
        ExecutorService service = null;
        try {
            service = Executors.newFixedThreadPool(1);
            context = new AuthenticationContext(AUTHORITY, false, service);
            Future<AuthenticationResult> future = context.acquireToken(RESOURCE, CLIENT_ID, username, password, null);
            result = future.get();
        } finally {
            service.shutdown();
        }

        if (result == null) {
            throw new ServiceUnavailableException(
                "authentication result was null");
        }
        return result;
    }

}
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.util.concurrent.ExecutorService;
导入java.util.concurrent.Executors;
导入java.util.concurrent.Future;
导入javax.naming.ServiceUnavailableException;
导入com.microsoft.aad.adal4j.AuthenticationContext;
导入com.microsoft.aad.adal4j.AuthenticationResult;
公共类获取{
私有最终静态字符串权限=”https://login.windows.net/common/oauth2/v2.0/authorize";
专用最终静态字符串客户端\u ID=“29275…011a”;
私有最终静态字符串资源=”https://graph.windows.net";
公共静态void main(字符串[]args)引发异常{
try(BufferedReader br=new BufferedReader(new InputStreamReader(
系统(中){
系统输出打印(“输入用户名:”);
字符串username=br.readLine();
系统输出打印(“输入密码:”);
字符串密码=br.readLine();
AuthenticationResult=getAccessTokenFromUserCredentials(
用户名、密码);
System.out.println(“访问令牌-”+result.getAccessToken());
System.out.println(“刷新令牌-”+result.getRefreshToken());
System.out.println(“ID-Token-”+result.getIdToken());
System.out.println(“Expires in-”+result.getExpiresAfter());
}
}
私有静态身份验证结果getAccessTokenFromUserCredentials(
字符串用户名、字符串密码)引发异常{
AuthenticationContext上下文=null;
AuthenticationResult=null;
ExecutorService=null;
试一试{
服务=Executors.newFixedThreadPool(1);
context=新的AuthenticationContext(AUTHORITY、false、service);
未来

然后我得到了屏幕截图底部显示的访问令牌验证错误。我不明白令牌不起作用的原因。我在Azure AD注册的应用程序上设置了权限,用户已经授予了该应用程序权限。我唯一能想到的是可能没有指定范围,但我不确定这就是问题所在。如果是,我如何指定它们?

我发现了问题所在

错误的资源URI。Azure AD Graph API为


Microsoft Graph API资源URI是

您好,我正在尝试使用Java中的Graph API开发一个支持OneDrive的应用程序。您找到了一个SDK来实现这一点吗?有一个用于身份验证的SDK(通过azure完成)名为adal4j的源代码。至于与OneDrive graph的交互,目前还没有。我最终使用内置的java.net库对graph进行http调用。