java - 使用 HttpClient 使用 java 客户端访问 power Bi 组
问题描述
我想使用 ResteasyClient 访问 power Bi 中的组列表,我想使用服务主体(仅限应用令牌)的身份验证形式。我有应用程序 ID(客户端)、应用程序密钥(密钥)范围 = Group.Read.All、访问令牌 URL https://login.microsoftonline.com/common/oauth2/token和授权类型 = 客户端凭据。
public static String getAccessToken(OAuth2Details oauthDetails) {
HttpPost post = new HttpPost(oauthDetails.getAuthenticationServerUrl());
String clientId = oauthDetails.getClientId();
String clientSecret = oauthDetails.getClientSecret();
String scope = oauthDetails.getScope();
List<BasicNameValuePair> parametersBody = new ArrayList<BasicNameValuePair>();
parametersBody.add(new BasicNameValuePair(OAuthConstants.GRANT_TYPE,
oauthDetails.getGrantType()));
parametersBody.add(new BasicNameValuePair(OAuthConstants.CLIENT_ID,
clientId));
parametersBody.add(new BasicNameValuePair(
OAuthConstants.CLIENT_SECRET, clientSecret));
if (isValid(scope)) {
parametersBody.add(new BasicNameValuePair(OAuthConstants.SCOPE,
scope));
}
HttpClient client = new DefaultHttpClient();
HttpResponse response = null;
String accessToken = null;
try {
post.setEntity(new UrlEncodedFormEntity(parametersBody, HTTP.UTF_8));
response = client.execute(post);
int code = response.getStatusLine().getStatusCode();
if (code == OAuthConstants.HTTP_UNAUTHORIZED) {
if (log.isDebugEnabled()) {
log.debug("Authorization server expects Basic authentication");
}
// Add Basic Authorization header
post.addHeader(
OAuthConstants.AUTHORIZATION,
getBasicAuthorizationHeader(oauthDetails.getClientId(),
oauthDetails.getClientSecret()));
if (log.isDebugEnabled()) {
log.debug("Retry with client credentials");
}
post.releaseConnection();
response = client.execute(post);
code = response.getStatusLine().getStatusCode();
if (code == 401 || code == 403) {
if (log.isDebugEnabled()) {
log.debug("Could not authenticate using client credentials.");
}
throw new RuntimeException(
"Could not retrieve access token for client: "
+ oauthDetails.getClientId());
}
}
Map<String, String> map = handleResponse(response);
accessToken = map.get(OAuthConstants.ACCESS_TOKEN);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return accessToken;
}
谢谢你。
我有许可证(powerbi,)我应该能够使用用户名和密码生成令牌,但它不起作用。我的回复当前状态为 400,但我的网址似乎是正确的。基本上我有这个
client_id=affxxx
client_secret=cxxx
username=xxx
password=xxx
authentication_server_url=https://login.microsoftonline.com/common/oauth2/token
grant_type=client_credentials
client_credentials=client_credentials
当前响应
HTTP/1.1 400 Bad Request [Cache-Control: no-cache, no-store, Pragma: no-cache, Content-Type: application/json; charset=utf-8, Expires: -1, Strict-Transport-Security: max-age=31536000; includeSubDomains, X-Content-Type-Options: nosniff, x-ms-request-id: 11cd7b41-eaf6-49d4-b6a6-3b19a5569c00, x-ms-ests-server: 2.1.9288.13 - AMS1 ProdSlices, P3P: CP="DSP CUR OTPi IND OTRi ONL FIN", Set-Cookie: fpc=AlrZG0Zj8XhGpMfGBgQKR1Y; expires=Wed, 25-Sep-2019 13:03:32 GMT; path=/; secure; HttpOnly, Set-Cookie: x-ms-gateway-slice=prod; path=/; secure; HttpOnly, Set-Cookie: stsservicecookie=ests; path=/; secure; HttpOnly, Date: Mon, 26 Aug 2019 13:03:32 GMT, Content-Length: 468]
解决方案
推荐阅读
- html - 更新(可重现)- 使用 MediaRecorder API(音频/webm 作品)录制时的间隙
- scala - Scala方法无法解析变量
- umbraco - 如何在 Umbraco 中使用图像裁剪器
- c# - Asp.Net Core FromBody 参数在角度 PUT 请求上始终为空
- javascript - Nodejs Mysql:在另一条路线中访问变量
- sql - SQL Server:我收到此消息 - 消息 8114,级别 16,状态 5
- json - 放心的两个不同json文件之间的依赖关系
- node.js - 如何将 cookie 从外部附加到 cookieJar、nodeJS
- python - 带枚举的有序字典python
- azure - 在 azure 函数中共享 Cloud* 对象