Java 使用OAuth2.0客户端凭据验证Azure日志分析Api

Java 使用OAuth2.0客户端凭据验证Azure日志分析Api,java,oauth-2.0,azure-active-directory,azure-log-analytics,Java,Oauth 2.0,Azure Active Directory,Azure Log Analytics,我正在尝试访问在Azure Active Directory(AAD)中注册的Azure应用程序。我使用的是OAuth2.O客户端凭据协议() 使用Rest客户端(邮递员),我能够连接。但是我需要在我的Java应用程序中做同样的事情 连接有两个步骤 获取访问令牌 POST https://login.microsoftonline.com/YOUR_AAD_TENANT/oauth2/token Content-Type: application/x-www-form-urlencod

我正在尝试访问在Azure Active Directory(AAD)中注册的Azure应用程序。我使用的是OAuth2.O客户端凭据协议()

使用Rest客户端(邮递员),我能够连接。但是我需要在我的Java应用程序中做同样的事情

连接有两个步骤

  • 获取访问令牌

    POST  https://login.microsoftonline.com/YOUR_AAD_TENANT/oauth2/token    
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=client_credentials
    &client_id=YOUR_CLIENT_ID
    &redirect_uri=YOUR_REDIRECT_URI
    &resource=https://management.azure.com/
    &client_secret=YOUR_CLIENT_SECRET 
    
  • 使用访问令牌向工作区发出请求

    POST https://api.loganalytics.io/v1/workspaces/8fXXXXX-0a84-XXX-XXX- c1a5XXXXXX/query?timespan=P1D
    
    Authorization: Bearer [access_token]      
    {
        "query": "AzureActivity | limit 10"
    }
    
  • 有人能帮我写一个java客户端来完成上面的工作吗?我提到了以下链接:


    但是他们不使用租户id和授权类型,不使用
    客户端\u凭据

    尝试下面的代码示例,使用
    authResult.getAccessToken()
    来获取访问令牌,它应该可以工作

    import com.microsoft.aad.adal4j.AuthenticationContext;
    import com.microsoft.aad.adal4j.AuthenticationResult;
    import com.microsoft.aad.adal4j.ClientCredential; // for service principal
    
    import java.util.concurrent.ExecutionException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.Future;
    
    // Account specific values
    String tenantId = <your tenant id>
    String clientId = <your client id>
    String password = <your password>
    
    // use adal to Authenticate
    AuthenticationContext authContext = null;
    AuthenticationResult authResult = null;
    ExecutorService service = null;
    
    try {
        service = Executors.newFixedThreadPool(1);
        String url = "https://login.microsoftonline.com/" + tenantId + "/oauth2/authorize";
        authContext = new AuthenticationContext(url,
                                                false,
                                                service);
            ClientCredential clientCred = new ClientCredential(clientId, password);
            Future<AuthenticationResult>  future = authContext.acquireToken(
                                                            "https://management.azure.com/",
                                                            clientCred,
                                                            null);
        authResult = future.get();
    } catch (Exception ex) {
        // handle exception as needed
    } finally {
        service.shutdown();
    }
    
    import com.microsoft.aad.adal4j.AuthenticationContext;
    导入com.microsoft.aad.adal4j.AuthenticationResult;
    导入com.microsoft.aad.adal4j.ClientCredential;//服务负责人
    导入java.util.concurrent.ExecutionException;
    导入java.util.concurrent.ExecutorService;
    导入java.util.concurrent.Executors;
    导入java.util.concurrent.Future;
    //帐户特定值
    字符串tenantId=
    字符串clientId=
    字符串密码=
    //使用adal进行身份验证
    AuthenticationContext authContext=null;
    AuthenticationResult authResult=null;
    ExecutorService=null;
    试一试{
    服务=Executors.newFixedThreadPool(1);
    字符串url=”https://login.microsoftonline.com/“+tenantId+”/oauth2/authorize”;
    authContext=新的AuthenticationContext(url,
    假,,
    服务);
    ClientCredential clientCred=新的ClientCredential(clientId,密码);
    未来