このガイドでは、直接管理 Azure API Management REST API を呼び出すために必要なアクセス トークン (SAS トークン) を作成する方法について説明します。
直接管理 REST API にアクセスするための承認とその他の前提条件の詳細については、「REST API API Management直接管理」を参照してください。
重要
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 portal で Azure API Management インスタンスに移動します。
左側のメニューの [デプロイとインフラストラクチャ] セクションから [管理 API] を選択します。
[REST API API Management有効にする] で、[はい] を選択します。
重要
[REST API API Management有効にする] が選択されていない場合、そのサービス インスタンスに対して REST API に対して行われた呼び出しは失敗します。
[有効期限] ボックスに、アクセス トークンの有効期日と時刻を指定します。 この値は
MM/DD/YYYY H:MM PM|AM
形式である必要があります。[秘密キー] ドロップダウン リストで主キーまたはセカンダリ キー を選択します。 これらのキーのどちらを使用しても同等のアクセスが提供されます。これらの 2 つのキーは、柔軟なキー管理戦略を実現するために提供されています。
[ 生成] を選択してアクセス トークンを作成します。
完全なアクセス トークンをコピーし、次の例に示すように、API Management REST API に対するすべての要求の
Authorization
ヘッダーに含めます。Authorization: SharedAccessSignature integration&201808020500&aAsTE43MAbKMkZ6q83Z732IbzesfsaPEU404oUjQ4ZLE9iIXLz+Jj9rEctxKYw43SioCfdLaDq7dT8RQuBKc0w==
プログラムによって SAS トークンを作成する
次の形式で文字列から署名を作成します。
{identifier} + "\n" + {expiry}
各値の説明:
identifier
- Azure API Management インスタンスの [管理 API] タブの [識別子] フィールドの値 (詳細については、前のセクションを参照)。
expiry
- SAS トークンの有効期限が必要です。主キーまたはセカンダリ キーを使用して署名する文字列に HMAC-SHA512 ハッシュ関数を適用して、署名を生成します。
返された署名キーを Base64 でエンコードします。
次の形式を使用してアクセス トークンを作成します。
uid={identifier}&ex={expiry}&sn={Base64 encoded signature}
例:
uid=53dd860e1b72ff0467030003&ex=2014-08-04T22:03:00.0000000Z&sn=ItH6scUyCazNKHULKA0Yv6T+Skk4bdVmLqcPPPdWoxl2n1+rVbhKlplFrqjkoUFRr0og4wjeDz4yfThC82OjfQ==
これらの値を使用して、次の例に示すように、API Management 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 Management .NET REST API サンプル」を参照してください。