java - 使用 OAuth2.0 客户端凭据向 Azure Log Analytics Api 进行身份验证
问题描述
我正在尝试访问我在 Azure Active Directory (AAD) 中注册的 Azure 应用程序。我正在使用 OAuth2.O 客户端凭据协议 ( https://dev.loganalytics.io/documentation/Authorization/OAuth2 )。
使用 Rest 客户端(邮递员)我可以连接。但我需要在我的 Java 应用程序中做同样的事情。
连接有2个步骤
获取访问令牌。
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客户端来做上面吗?我参考了以下链接:
但是他们不使用 Tenant id 和 grant type not client_credentials
。
解决方案
尝试如下代码示例,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();
}
有关更多详细信息,请参阅此链接。
推荐阅读
- reactjs - 风格系统 | 解决组件内的主题样式功能
- python - 为什么我的 request.user 在 Django 中没有组?
- graphics - 是否有任何适用于 julia 的高级通用图形库?
- java - 退出管理面板后如何返回主菜单并进入任何面板?
- android - 如何从广播接收器类调用颤振方法?
- vue.js - Nuxt + Vuetify + VueDraggable - 可拖动标签道具,v-row,在开发服务器中工作,但在构建/运行生产后不能
- java - 如何在 JFrame 内的 JPanel 内绘制形状
- javascript - ag-Grid:如何触发依赖单元格的重新验证
- metrics - Quarkus MP-Metrics:具有 MetricID 的指标已经存在
- angular - 错误:无法读取 null 的属性“find”