Часть 3. Пример реализации стороннего API

Предыдущая часть: требования к проверке подлинности

В этом примере основное приложение использует сторонний API, защищенный ключом доступа. В этом разделе показано, как API используется Функции Azure, но те же принципы применяются независимо от того, как или где реализован API , независимо от того, размещается ли приложение на другом облачном поставщике или традиционном веб-сервере.

Ключевым аспектом является то, что все клиентские запросы к защищенной конечной точке должны включать ключ доступа, который приложение должно безопасно управлять. В этом разделе представлен обзор реализации такого API с помощью функций Azure, но вы можете адаптировать принципы к конкретным потребностям.

Пример реализации стороннего API

Пример стороннего API — простая конечная точка, которая возвращает случайное число от 1 до 999. API защищен ключом доступа, который необходимо предоставить в запросе для доступа к конечной точке. Для демонстрационных целей этот API развертывается в конечной точке https://msdocs-example-api.azurewebsites.net/api/RandomNumber. Чтобы вызвать API, необходимо предоставить ключ d0c5atM1cr0s0ft доступа в ?code= параметре URL-адреса или в 'x-functions-key' свойстве заголовка HTTP. Например, после развертывания приложения и API попробуйте этот URL-адрес в браузере или curl: https://msdocs-example-api.azurewebsites.net/api/RandomNumber?code=d0c5atM1cr0s0ft

Если ключ доступа действителен, конечная точка возвращает ответ JSON, содержащий одно свойство , значение которого — число от 1 до 999, например {"value": 959}.

Конечная точка реализована в Python и развернута в Функциях Azure. Код выглядит следующим образом:

import logging
import random
import json

import azure.functions as func


def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('RandomNumber invoked via HTTP trigger.')

    random_value = random.randint(1, 1000)
    dict = { "value" : random_value }
    return func.HttpResponse(json.dumps(dict))

В примере репозитория этот код находится в разделе third_party_api/RandomNumber/__init__.py. Папка , RandomNumber, предоставляет имя функции и __init__.py содержит код. Другой файл в папке function.json описывает, когда функция запускается. Другие файлы в родительской папке third_party_api содержат сведения о приложении-функции Azure, на котором размещена сама функция.

Чтобы развернуть код, скрипт подготовки примера выполняет следующие действия.

  1. Создайте резервную учетную запись хранения для функций Azure с помощью команды az storage account create Azure CLI для управления состоянием и внутренними операциями.

  2. Создайте приложение Функций Azure с помощью команды az function app createAzure CLI.

  3. После ожидания в течение 60 секунд завершения подготовки узла разверните код с помощью команды Функции Azure Core Toolsfunc azure functionapp publish.

  4. Назначьте ключ d0c5atM1cr0s0ftдоступа функции. (См. раздел "Защита функций Azure " для фонового доступа к ключам функций.)

    В скрипте развертывания этот шаг осуществляется с использованием команды az functionapp function keys set Azure CLI.

    Комментарии включаются для демонстрации того, как выполнить этот шаг через вызов REST API к API управления ключами функций при необходимости. Чтобы вызвать этот REST API, сначала необходимо выполнить другой вызов REST API, чтобы получить главный ключ приложения-функции.

Вы также можете назначить ключи доступа на портале Azure. На странице приложения "Функции" выберите "Функции", а затем выберите конкретную функцию для защиты (которая называется RandomNumber в этом примере). На странице функции выберите "Ключи функции" , чтобы открыть страницу, в которой можно создать и управлять этими ключами.