[英]Azure AD Graph API - Constantly returning 403 for getMemberGroups method
[英]Azure Billing API returning 403
我花了几天时间试图弄清楚这一点,查看了我可以在Azure网站,Azure git中心以及所有相关的堆栈溢出信息中找到的所有信息。 我希望我缺少一些简单的东西。
我正在网上发布示例Java代码来获取令牌:
try {
exec = Executors.newFixedThreadPool(1);
context = new AuthenticationContext("https://login.microsoftonline.com/8e4f0713-5eea-4da0-99c0-xxxxxxxxxxxx",
true, exec);
ClientCredential cred = new ClientCredential(webClientID, clientSecret);
Future<AuthenticationResult> future = context.acquireToken("https://management.azure.com/", cred, null);
result = future.get();
} catch(Exception e) {
logger.warn("Exception " + e);
} finally {
exec.shutdown();
}
if (result == null) {
return null;
}
return result.getAccessToken();
这将生成一个令牌,将其放入请求标头中:
Authorization: Bearer -token-
The GET https://management.azure.com/subscriptions/758ad253-cbf5-4b18-8863-xxxxxxxxxxxx/providers/Microsoft.Commerce/RateCard?api-version=2015-06-01-preview%26%24filter%3DOfferDurableId+eq+%27MS-AZR-0003p%27+and+Currency+eq+%27USD%27+and+Locale+eq+%27en-US%27+and+RegionInfo+eq+%27US%27
返回403代码:
Exception: java.io.IOException: Server returned HTTP response code: 403 for URL: https://management.azure.com/subscriptions/758ad253-cbf5-4b18-8863-xxxxxxxxxxxx/providers/Microsoft.Commerce/RateCard?api-version=2015-06-01-preview%26%24filter%3DOfferDurableId+eq+%27MS-AZR-0003p%27+and+Currency+eq+%27USD%27+and+Locale+eq+%27en-US%27+and+RegionInfo+eq+%27US%27
标头:[0] null:禁止HTTP / 1.1 403
[1]缓存控制:无缓存
[2]语法:无缓存
[3] Content-Type:application / json; 字符集= utf-8
[4]过期:-1
[5] x-ms-failure-cause:网关
[6] x-ms-request-id:e4ad9253-e034-481d-aba0-f46902b7057f
[7] x-ms-correlation-request-id:e4ad9253-e034-481d-aba0-f46902b7057f
[8] x-ms-routing-request-id:EASTUS:20151103T205103Z:e4ad9253-e034-481d-aba0-f46902b7057f
[9]严格的运输安全性:max-age = 31536000; includeSubDomains
[10]日期:2015年11月3日星期二20:51:02 GMT
[11]连线:关闭
[12]内容长度:303
我在Azure mgmt控制台上进行了所有设置,以在Azure AD中创建应用程序,获取clientID和客户端机密等。SSL / HTTPS代码为:
azureURL = new java.net.URL(url);
con = (HttpsURLConnection)azureURL.openConnection();
con.disconnect();
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
con.setSSLSocketFactory(MyUtils.getSSLSocketFactory());
con.setRequestMethod("GET");
con.setRequestProperty("x-ms-version", "2015-06-01-preview");
con.setRequestProperty("Content-Type", "application/json");
String token = getAccessTokenFromServicePrincipalCredentials();
if (token != null) {
con.setRequestProperty("Authorization", "Bearer " + token);
con.connect();
in = (InputStream)con.getContent();
InputStreamReader inr = new InputStreamReader(in);
} else {
logger.warn("unable to obtain prices");
}
关于如何调试问题的任何建议?
我看到您正在获取Service Principal
的访问令牌(即应用程序本身)。 请确保您在Azure订阅上为该服务主体用户授予至少Reader
角色。 我相信您会收到此错误,因为该用户无权访问您的Azure订阅。
请参阅此链接: https : //azure.microsoft.com/en-in/documentation/articles/role-based-access-control-configure/ ( Manage access using the Azure Management Portal
部分Manage access using the Azure Management Portal
)有关如何分配角色的信息。
由于我们无法通过带有HTTPS请求的证书来调用使用率和价目表API。 如前所述:
您必须使用Azure Active Directory对使用Azure资源管理器对资源执行的所有任务进行身份验证
关于身份验证Azure Resource Manager请求的信息 。
所以您收到了403期杂志。
请尝试使用 “ 资源使用情况(预览)”中提到的请求标头Content-Type和Authorization为REST API构建通用的HTTP请求。
您还可以测试在HTTP请求构建工具中获取所需的信息,例如:
这是一个类似的线程。 如何使用基于管理证书的身份验证对Azure进行REST API调用? 供你参考。
对于找不到的文件,答复为:
java.io.FileNotFoundException:
找不到HTTP / 1.1 404
[1]缓存控制:无缓存
[2]语法:无缓存
[3] Content-Type:application / json; 字符集= utf-8
[4]过期:-1
[5] x-ms-failure-cause:网关
[6] x-ms-request-id:8bd5ea3a-5a5f-4eb5-86b5-bd6581f94e00
[7] x-ms-correlation-request-id:8bd5ea3a-5a5f-4eb5-86b5-bd6581f94e00
[8] x-ms-routing-request-id:EASTUS:20151119T181954Z:8bd5ea3a-5a5f-4eb5-86b5-bd6581f94e00
[9]严格的运输安全性:max-age = 31536000; includeSubDomains
[10]日期:2015年11月19日,星期四,格林尼治标准时间
[11]内容长度:348
让我看看还能得到什么...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.