Как делегировать регистрацию пользователей и подписку продуктов

ОБЛАСТЬ ПРИМЕНЕНИЯ: Разработчик | Базовый | Стандартный | Премиум

Делегирование позволяет веб-сайту стать владельцем пользовательских данных и выполнять настраиваемую проверку. С помощью делегирования вы можете обрабатывать вход и регистрацию разработчика (и связанные операции управления учетными записями) и подписку на продукт с помощью существующего веб-сайта, а не встроенных функций портала разработчика.

Делегирование входа и регистрации разработчика

Чтобы делегировать вход и регистрацию разработчика и параметры управления учетными записями разработчика на существующий веб-сайт, создайте специальную конечную точку делегирования на сайте. Это специальное делегирование выступает в качестве точки входа для всех запросов входа или регистрации и связанных запросов, инициированных на портале разработчика Управление API.

Итоговый рабочий процесс будет иметь следующий вид:

  1. Разработчик щелкает ссылку на вход или регистрацию или ссылку управления учетными записями на портале разработчика Управление API.
  2. Браузер перенаправляется в конечную точку делегирования.
  3. Конечная точка делегирования в возврате перенаправляет пользователя на пользователя или представляет пользователя с помощью пользовательского интерфейса управления учетными записями или входа.
  4. После завершения операции пользователь перенаправляется обратно на портал разработчика Управление API в расположении, где они оставили.

Настройка API Management для маршрутизации запросов через конечную точку делегирования

  1. На портале Azure найдите Портал разработчика для ресурса API Management.

  2. Щелкните элемент Делегирование.

  3. Установите флажок Делегирование входа и регистрации.

    Снимок экрана: делегирование входа и регистрации на портале.

  4. Выберите URL-адрес своей специальной конечной точки делегирования и введите его в поле URL-адрес конечной точки делегирования.

  5. В поле Ключ проверки делегирования выполните одно из следующих действий:

    • Введите секрет, используемый для расчета подписи, чтобы подтвердить, что запрос исходит от API Management.
    • Нажмите кнопку Создать, и служба API Management сгенерирует для вас случайный ключ.
  6. Нажмите кнопку Сохранить.

Создание конечной точки делегирования

Рекомендуемые действия по созданию новой конечной точки делегирования для добавления на сайт:

  1. Получение запроса в следующей форме в зависимости от операции:

    http://www.yourwebsite.com/apimdelegation?operation={operation}& returnUrl={URL-адрес исходной страницы}&salt={string}&sig={string}

    -или-

    http://www.yourwebsite.com/apimdelegation?operation={operation}& userId={идентификатор пользователя учетной записи}&salt={string}&sig={string}

    Параметры запроса:

    Параметр Описание
    operation Определяет тип запроса на делегирование. Доступные операции: SignIn, SignUp, ChangePassword, ChangeProfile, CloseAccount, SignOut.
    returnUrl В signIn или SignUp URL-адрес, в котором пользователь щелкнул ссылку для входа или регистрации.
    userId В ChangePassword, ChangeProfile, CloseAccount и SignOut идентификатор пользователя учетной записи, которую вы хотите управлять.
    Соль Специальная строка случайных данных, используемая для вычисления хэша безопасности.
    sig Вычисленный хэш безопасности, который будет сравниваться с вашим вычисленным хэшем.
  2. Убедитесь, что запрос поступает из службы управления Azure API (это необязательный шаг, но мы настоятельно рекомендуем выполнять его для обеспечения безопасности).

    • Вычислите хэш HMAC-SHA512 строки на основе возвращаемых параметров запроса (или UserId). Например, проверка нашем примере кода.

      Для signIn и SignUp:

      HMAC(salt + '\n' + returnUrl)
      

      Для ChangePassword, ChangeProfile, CloseAccount и SignOut:

      HMAC(salt + '\n' + userId)
      
    • Сравните вычисленный выше хэш со значением параметра запроса sig. Если два хэша совпадают, перейдите к следующему шагу. В противном случае отклоните запрос.

  3. Убедитесь, что вы получаете запрос на вход или регистрацию или операцию управления учетными записями.

  4. Представить пользователя с помощью пользовательского интерфейса управления учетными записями или входа в систему или регистрации.

  5. После завершения операции на стороне управляйте пользователем в Управление API. Например, если пользователь регистрируется, создайте соответствующую учетную запись для них в Управление API.

    • Создание пользователя с помощью интерфейса API Management REST API.
    • Задайте для идентификатора пользователя то же значение, что и в хранилище пользователей, или новый легко отслеживаемый идентификатор.
  6. После входа или регистрации, когда пользователь успешно прошел проверку подлинности:

    • Запросите общий маркер доступа через REST API службы API Management.

    • Добавьте параметр запроса returnUrl в URL-адреса единого входа, который вы получили из указанного выше вызова API. Например:

      https://contoso.developer.azure-api.net/signin-sso?token=<URL-encoded token>&returnUrl=%2Freturn%2Furl

    • Перенаправьте пользователя на вышеупомянутый URL-адрес.

Делегирование подписки на продукт

Процедура делегирования подписки на продукт похожа на процедуру делегирования входа или регистрации пользователя. Итоговый рабочий процесс будет иметь следующий вид:

  1. Разработчик выбирает продукт на портале разработчика APIM и нажимает кнопку Подписаться.
  2. Браузер перенаправляется в конечную точку делегирования.
  3. Конечная точка делегирования выполняет заданные вами обязательные шаги для подписки на продукт. Они могут включать:
    • перенаправление на другую страницу для запроса сведений о выставлении счетов;
    • дополнительные вопросы;
    • сохранение информации без вмешательства пользователя.

Включение REST API службы API Management

На странице Делегирование щелкните Делегировать подписку на продукт.

Создание конечной точки делегирования

Рекомендуемые действия по созданию новой конечной точки делегирования для добавления на сайт:

  1. Получение запроса в следующей форме в зависимости от операции.

    http://www.yourwebsite.com/apimdelegation?operation={operation}&p roductId={продукт для подписки на}&userId={запрос пользователя}&salt={string}&sig={string}

    -или-

    http://www.yourwebsite.com/apimdelegation?operation={operation}& subscriptionId={subscription to manage}&salt={string}&sig={string}

    Параметры запроса:

    Параметр Описание
    operation Определяет тип запроса на делегирование. Допустимые варианты запросов на подписку продукта:
    • Subscribe: запрос на подписку пользователя на заданный продукт с предоставленным идентификатором (см. ниже).
    • Отмена подписки: запрос на отмену подписки пользователя из продукта
    productId Для варианта Subscribe значение productId — идентификатор продукта, подписку на который запрашивает пользователь.
    userId Для варианта Subscribe — имя пользователя запрашивающего пользователя.
    subscriptionId При отмене подписки идентификатор подписки продукта.
    Соль Специальная строка случайных данных, используемая для вычисления хэша безопасности.
    sig Вычисленный хэш безопасности, который будет сравниваться с вашим вычисленным хэшем.
  2. Убедитесь, что запрос поступает из службы управления Azure API (это необязательный шаг, но мы настоятельно рекомендуем его выполнять для обеспечения безопасности)

    • Вычислите HMAC-SHA512 строки на основе идентификатора продукта и идентификатора пользователя (или subscriptionId) и параметров запроса соли:

      Для подписки:

      HMAC(salt + '\n' + productId + '\n' + userId)
      

      Для отмены подписки:

      HMAC(salt + '\n' + subscriptionId)
      
    • Сравните вычисленный выше хэш со значением параметра запроса sig. Если два хэша совпадают, перейдите к следующему шагу. В противном случае отклоните запрос.

  3. Процесс обработки подписки на продукт с учетом типа операции, запрашиваемой в параметре operation, например выставление счета, дополнительные вопросы и т. д.

  4. После завершения операции на стороне управляйте подпиской в Управление API. Например, подписывайтесь на Управление API продукт, вызвав REST API для подписок.

Пример кода

В этих примерах кода показано, как создать хэш returnUrl параметра запроса при делегировании входа пользователя или регистрации. Это returnUrl URL-адрес страницы, по которой пользователь щелкнул ссылку для входа или регистрации.

  • принять ключ проверки делегирования, заданный на экране Делегирование на портале Azure.
  • создать HMAC, который используется для проверки подписи, доказывая действительность переданного returnUrl.

При незначительном изменении можно использовать тот же код для вычисления других хэшей, таких как с productIduserId и при делегировании подписки на продукт.

Код C# для создания хэша returnUrl

using System.Security.Cryptography;

string key = "delegation validation key";
string returnUrl = "returnUrl query parameter";
string salt = "salt query parameter";
string signature;
using (var encoder = new HMACSHA512(Convert.FromBase64String(key)))
{
    signature = Convert.ToBase64String(encoder.ComputeHash(Encoding.UTF8.GetBytes(salt + "\n" + returnUrl)));
    // change to (salt + "\n" + productId + "\n" + userId) when delegating product subscription
    // compare signature to sig query parameter
}

Код NodeJS для создания хэша returnUrl

var crypto = require('crypto');

var key = 'delegation validation key'; 
var returnUrl = 'returnUrl query parameter';
var salt = 'salt query parameter';

var hmac = crypto.createHmac('sha512', new Buffer(key, 'base64'));
var digest = hmac.update(salt + '\n' + returnUrl).digest();
// change to (salt + "\n" + productId + "\n" + userId) when delegating product subscription
// compare signature to sig query parameter

var signature = digest.toString('base64');

Внимание

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

Следующие шаги