直接管理 Azure API Management REST API に対する認証
このガイドでは、直接管理 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 サンプル」を参照してください。