簡體   English   中英

Azure計費API返回403

[英]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:

https://management.azure.com/subscriptions/758ad253-cbf5-4b18-8863-3eed082xxxxx/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

找不到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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM