你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
向直接管理 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 资源管理器的 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 令牌到期日期。通过使用主密钥或辅助密钥向 string-to-sign 应用 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 管理 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 示例。