共用方式為


向直接管理 Azure API 管理 REST API 進行驗證

本指南說明如何建立存取權杖 (SAS 權杖,) 對直接管理 Azure API 管理 REST API 進行呼叫。

如需存取直接管理 REST API 之授權和其他必要條件的詳細資訊,請參閱直接管理API 管理 REST API

重要

SAS 權杖存取只能套用到直接管理 API 呼叫,例如: https://apim-instance.management.azure-api.net/ /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis?api-version=2021-08-01 。 您無法將它用於對 Azure Resource Manager的 API 呼叫。

手動建立 SAS 權杖

  1. 流覽至Azure 入口網站中的 Azure API 管理 實例。

  2. 從左側功能表的[部署 + 基礎結構] 區段選取 [管理 API]。

    在Azure 入口網站中選取 [管理 API]

  3. [啟用API 管理 REST API] 中,選取 []。

    重要

    如果未選取[啟用API 管理 REST API,則對該服務實例的 REST API 進行呼叫將會失敗。

    在 Azure 入口網站 中啟用 API 管理 API

  4. 在 [到期] 文字方塊中,指定存取權杖的到期日期和時間。 此值的格式必須是 MM/DD/YYYY H:MM PM|AM

    在 Azure 入口網站 中產生API 管理 REST API 的存取權杖

  5. 在 [秘密金鑰] 下拉式清單中選取主要金鑰或次要 金鑰 。 這兩種金鑰所提供的存取是相同的;之所以有兩種金鑰,是為了金鑰管理策略的彈性。

  6. 選取 [產生 ] 以建立存取權杖。

  7. 複製完整的存取權杖,並將其提供至每個對 API 管理 REST API 之要求的 Authorization 標頭中,如下列範例所示。

    Authorization: SharedAccessSignature integration&201808020500&aAsTE43MAbKMkZ6q83Z732IbzesfsaPEU404oUjQ4ZLE9iIXLz+Jj9rEctxKYw43SioCfdLaDq7dT8RQuBKc0w==
    

以程式設計方式建立 SAS 權杖

  1. 以下列格式建構字串對登入:

    {identifier} + "\n" + {expiry}

    其中:
    identifier- Azure API 管理 實例 [管理 API] 索引標籤中的[識別碼] 欄位值 (,請參閱上一節以取得詳細資料) 。
    expiry - SAS 權杖所需的到期日。

  2. 使用主要或次要金鑰將 HMAC-SHA512 雜湊函數套用至簽署字串 (string-to-sign),以產生簽章。

  3. Base64 會對傳回的簽章金鑰進行編碼。

  4. 使用下列格式建立存取權杖。

    uid={identifier}&ex={expiry}&sn={Base64 encoded signature}

    範例:

    uid=53dd860e1b72ff0467030003&ex=2014-08-04T22:03:00.0000000Z&sn=ItH6scUyCazNKHULKA0Yv6T+Skk4bdVmLqcPPPdWoxl2n1+rVbhKlplFrqjkoUFRr0og4wjeDz4yfThC82OjfQ==

  5. 使用這些值,在每個對 API 管理 REST API 的要求中建立一個 Authorization 標頭,如下列範例所示。

    Authorization: SharedAccessSignature uid=53dd860e1b72ff0467030003&ex=2014-08-04T22:03:00.0000000Z&sn=ItH6scUyCazNKHULKA0Yv6T+Skk4bdVmLqcPPPdWoxl2n1+rVbhKlplFrqjkoUFRr0og4wjeDz4yfThC82OjfQ==
    

下列範例說明前述用以產生存取權杖的步驟。

using System;   
using System.Text;   
using System.Globalization;   
using System.Security.Cryptography;   
  
public class Program   
{   
    public static void Main()   
    {   
        var id = "53d7e14aee681a0034030003";   
        var key = "pXeTVcmdbU9XxH6fPcPlq8Y9D9G3Cdo5Eh2nMSgKj/DWqeSFFXDdmpz5Trv+L2hQNM+nGa704Rf8Z22W9O1jdQ==";   
        var expiry = DateTime.UtcNow.AddDays(10);   
        using (var encoder = new HMACSHA512(Encoding.UTF8.GetBytes(key)))   
        {   
            var dataToSign = id + "\n" + expiry.ToString("O", CultureInfo.InvariantCulture);   
            var hash = encoder.ComputeHash(Encoding.UTF8.GetBytes(dataToSign));   
            var signature = Convert.ToBase64String(hash);   
            var encodedToken = string.Format("SharedAccessSignature uid={0}&ex={1:o}&sn={2}", id, expiry, signature);   
            Console.WriteLine(encodedToken);   
        }   
    }   
}  
  

注意

SAS 權杖格式正確且已接受:
SharedAccessSignature uid=53dd860e1b72ff0467030003&ex=2014-08-04T22:03:00.0000000Z&sn=ItH6scUyCazNKHULKA0Yv6T+Skk4bdVmLqcPPPdWoxl2n1+rVbhKlplFrqjkoUFRr0og4wjeDz4yfThC82OjfQ==

SharedAccessSignature integration&201808020500&aAsTE43MAbKMkZ6q83Z732IbzesfsaPEU404oUjQ4ZLE9iIXLz+Jj9rEctxKYw43SioCfdLaDq7dT8RQuBKc0w==

如需完整的範例程式碼,請參閱API 管理 .NET REST API 範例

下一步