练习 - 在 Azure API 管理中创建订阅
可使用 Azure 门户中的 Azure API 管理用户界面来创建订阅并获取用于客户端应用的订阅密钥。
假设你就职的天气公司已决定向订阅此服务并付费的客户提供其气象数据。 关键要求是仅允许访问分配了密钥的客户端。 你作为首席开发者,需要创建 API 网关。 你将使用网关来发布公开 OpenAPI 终结点的 RESTful 天气 API。 然后,将保护该终结点并分配客户端密钥。
在本单元中,你将学习以下内容:
- 发布 RESTful 天气 API
- 部署 API 管理网关
- 通过网关终结点公开天气 API
- 根据订阅密钥限制访问
重要
需要自己的 Azure 订阅才能运行此练习,这可能会产生费用。 如果还没有 Azure 订阅,请在开始前创建一个免费帐户。
部署天气 Web API
你已开发了用于返回天气信息的 .NET Core 应用。 该应用包括用于生成 OpenAPI 文档的 Swashbuckle。
为节约时间,先运行在 Azure 中托管 API 的脚本。 此脚本执行以下步骤:
- 在免费层创建 Azure 应用服务计划
- 在 Azure 应用服务中创建 Web API,从本地存储库针对 Git 部署进行配置
- 为应用设置帐户级别部署凭据
- 本地配置 Git
- 将 Web API 部署到应用服务实例
登录 Azure 门户。
在 Azure 任务栏中,选择 Cloud Shell 图标以打开 Azure Cloud Shell。
在 Azure Cloud Shell 中运行以下 git clone 命令,克隆包含应用源和 GitHub 中的安装脚本的存储库。
git clone https://github.com/MicrosoftDocs/mslearn-control-authentication-with-apim.git
通过运行以下 cd 命令转到本地的 repo 文件夹目录。
cd mslearn-control-authentication-with-apim
顾名思义,
setup.sh
是创建 API 时将运行的脚本。 它将生成一个用于公开 OpenAPI 接口的公共 Web 应用。bash setup.sh
该脚本分为 7 个部分,运行大约需要 1 分钟。 注意,部署期间应用运行所需的所有依赖项都会在远程应用服务上自动安装。
脚本完成后,它将输出两个 URL:一个 Swagger URL 和一个示例 URL。 可以使用这些 URL 来测试应用部署。
若要测试应用是否正确部署,请将 Azure Cloud Shell 输出中的 Swagger URL 复制并粘贴到首选浏览器。 浏览器应显示应用的 Swagger UI,并声明以下 RESTful 终结点:
- api/weather/{latitude}/{longitude},它返回指定纬度和经度(双精度值)当天的气象数据。
- api/weather/{date}/{latitude}/{longitude},返回指定纬度和经度(双进度值)处指定日期(日期值)的气象数据。
最后,从 Azure Cloud Shell 输出中复制示例 URL 并将其保存。 此位置是 Swagger JSON URL。 本练习中稍后会用到它。
部署 API 网关
本练习的下一步是在 Azure 门户中创建 API 网关。 在下一个练习中,将使用此网关来发布 API。
登录到 Azure 门户。
在 Azure 资源菜单或“主页”上,选择“Azure 服务”下的“创建资源”。 此时会显示“创建资源”窗格。
在资源菜单中,选择“集成”,然后在结果中选择“API 管理”。 此时会显示“安装 API Management 网关”窗格。
在“基本信息”选项卡上,为每个设置输入以下值。
设置 值 项目详细信息 订阅 选择订阅。 资源组 选择新的或现有的资源组。 资源组是用于保存 Azure 解决方案相关资源的逻辑容器。 实例详细信息 区域 选择可用区域。 资源名称 输入 apim-WeatherData<random number>
;该随机数字旨在确保名称全局唯一。 记下此资源名称;它将是稍后在本练习中需要的 API 网关名称。工作区名称 输入 Weather-Company
。管理员电子邮件 用于接收所有系统通知的电子邮件地址。 定价层 定价层 从下拉列表中选择“ Consumption
”。选择“查看 + 创建”,然后在验证通过后选择“创建”。
注意
消耗层提供用于测试的快速部署,并具有即用即付的定价模型。 整体 API 管理体验与其他定价层类似。
可以查看部署进度以及正在创建的资源。
导入 API
部署完成后,使用以下过程将天气 API 导入 API 管理网关。
选择“转到资源”。 此时将显示资源的“API 管理服务”的“概述”窗格。
在左侧菜单窗格中的“API”下,选择“API”。 此时将显示 API 管理服务的“API”窗格,其中包含用于创建/显示 API 的模板选项。
在“从定义创建”下,选择“OpenAPI”。 此时将显示“基于 OpenAPI 规范创建”对话框。
在“OpenAPI 规范”字段中,粘贴之前在本练习中保存的 Swagger JSON URL。 当按 Enter 或选择对话框的其他区域时,系统将填充其他字段。 此数据是从 Swagger 所创建的 OpenAPI 规范中导入的。
接受所有其他设置的默认值,然后选择“创建”。
天气数据 API 的“设计”选项卡显示所有操作,其中包含两个 GET 操作。
添加用于访问天气 API 的订阅密钥
最后一步是添加天气数据 API 的订阅密钥。
在左侧菜单窗格中选择“API”下的“订阅”。 此时将显示 API 管理服务的“订阅”窗格。
在顶部菜单栏上,选择“添加订阅”。 此时将显示“新建订阅”窗格。
为每个设置输入以下值。
设置 值 名称 weather-data-subscription
显示名称 Weather Data Subscription
允许跟踪 无复选标记 范围 从下拉列表中选择“API”。 API 从下拉列表中选择“天气数据”。 选择“创建” 。 “订阅”窗格列出了两个订阅、内置的所有访问订阅和天气数据订阅。
在“天气数据订阅”行的末尾,选择省略号,然后在上下文菜单中选择“显示/隐藏密钥”。 此时将显示主密钥值和辅助密钥值。
将“主密钥”从“天气数据订阅”复制到剪贴板,并将其保存到某个位置(例如记事本)。 在下一步骤中将需要使用此密钥。
测试订阅密钥
API 使用密钥进行保护。 现在,为演示安全访问,我们将在以下两种情况下测试 API:不使用密钥和使用密钥。
在不传递订阅密钥的情况下发出请求。 在 Azure Cloud Shell 中运行以下 URL 命令。 将[网关名称]占位符替换为你在前一个任务中创建的 API 网关 (apim-WeatherDataNNNN) 的资源名称。
curl -X GET https://[Name Of Gateway].azure-api.net/api/Weather/53/-1
此命令没有订阅密钥,应返回 401 拒绝访问错误,类似于以下错误。
{ "statusCode": 401, "message": "Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API." }
现在,运行以下命令。 将网关名称占位符替换为 API 网关 (apim-WeatherDataNNNN) 的资源名称。 此外,请将主键占位符替换为从显示/隐藏步骤复制的主键。
curl -X GET https://[Name Of Gateway].azure-api.net/api/Weather/53/-1 \ -H 'Ocp-Apim-Subscription-Key: [Primary Key]'
如果添加了反引号,则此命令应会产生与以下代码类似的成功响应。
{"mainOutlook":{"temperature":32,"humidity":34},"wind":{"speed":11,"direction":239.0},"date":"2019-05-16T00:00:00+00:00","latitude":53.0,"longitude":-1.0}