我正在尝试访问在Azure Active Directory(AAD)中注册的Azure应用程序。我正在使用OAuth2.O客户端凭据协议(https://dev.loganalytics.io/documentation/Authorization/OAuth2)。
使用Rest客户端(Postman)我能够连接。但我需要在我的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和授权类型而不是client_credentials
。
尝试下面的代码示例,使用qazxsw poi获取访问令牌,它应该工作。
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();
}
。