您现在访问的是微软AZURE全睃版技术文档网站,若需覝访问由世纪互蝔违蝥的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.

Azure API 管理 REST API 身份验证

本指南介绍如何创建调用 Azure API 管理 REST API 所需的访问令牌。

有关访问 API 管理 REST API 的授权和其他先决条件的详细信息,请参阅 Api 管理 REST

有关使用 REST API 的详细信息,请参阅 API 管理 .net REST API 示例使用 Azure API 管理 REST API 视频入门

重要

SAS 令牌访问仅可应用于直接访问 API 调用,例如: https://apim-instance.management.azure-api.net/apis?api-version=2018-06-01-preview 。 不能将其用于对 Azure 资源管理器的 API 调用。

手动创建 SAS 令牌

  1. 在 Azure 门户中导航到自己的 Azure API 管理实例。

  2. 单击左侧菜单的 " API 管理" 部分中的 "管理 API "。

    API 管理菜单

  3. 请确保已选中 " 启用 API 管理 REST API 复选框。

    重要

    如果未选中“启用 API 管理 REST API”复选框,则对该服务实体调用 REST API 将会失败。

    API 管理已启用

  4. 在“过期”文本框中指定访问令牌的过期日期和时间。 此值必须采用 MM/DD/YYYY H:MM PM|AM 格式。

    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. 通过使用主密钥或辅助密钥向 string-to-sign 应用 HMAC-SHA512 哈希函数来生成签名。

  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 示例