向直接管理 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 權杖
流覽至Azure 入口網站中的 Azure API 管理 實例。
從左側功能表的[部署 + 基礎結構] 區段選取 [管理 API]。
在[啟用API 管理 REST API] 中,選取 [是]。
重要
如果未選取[啟用API 管理 REST API,則對該服務實例的 REST API 進行呼叫將會失敗。
在 [到期] 文字方塊中,指定存取權杖的到期日期和時間。 此值的格式必須是
MM/DD/YYYY H:MM PM|AM
。在 [秘密金鑰] 下拉式清單中選取主要金鑰或次要 金鑰 。 這兩種金鑰所提供的存取是相同的;之所以有兩種金鑰,是為了金鑰管理策略的彈性。
選取 [產生 ] 以建立存取權杖。
複製完整的存取權杖,並將其提供至每個對 API 管理 REST API 之要求的
Authorization
標頭中,如下列範例所示。Authorization: SharedAccessSignature integration&201808020500&aAsTE43MAbKMkZ6q83Z732IbzesfsaPEU404oUjQ4ZLE9iIXLz+Jj9rEctxKYw43SioCfdLaDq7dT8RQuBKc0w==
以程式設計方式建立 SAS 權杖
以下列格式建構字串對登入:
{identifier} + "\n" + {expiry}
其中:
identifier
- Azure API 管理 實例 [管理 API] 索引標籤中的[識別碼] 欄位值 (,請參閱上一節以取得詳細資料) 。
expiry
- SAS 權杖所需的到期日。使用主要或次要金鑰將 HMAC-SHA512 雜湊函數套用至簽署字串 (string-to-sign),以產生簽章。
Base64 會對傳回的簽章金鑰進行編碼。
使用下列格式建立存取權杖。
uid={identifier}&ex={expiry}&sn={Base64 encoded signature}
範例:
uid=53dd860e1b72ff0467030003&ex=2014-08-04T22:03:00.0000000Z&sn=ItH6scUyCazNKHULKA0Yv6T+Skk4bdVmLqcPPPdWoxl2n1+rVbhKlplFrqjkoUFRr0og4wjeDz4yfThC82OjfQ==
使用這些值,在每個對 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 範例。