Поделиться через


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

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

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

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

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

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

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

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

  1. В портале Azure перейдите к экземпляру Управления API.

  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}

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

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

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

      Для signIn и SignUp:

      HMAC(salt + '\n' + returnUrl)
      

      Для ChangePassword, ChangeProfile, CloseAccount и SignOut:

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

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

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

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

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

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

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

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

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

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

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

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

Включите функциональность управления API

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

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

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

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

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

    -или-

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

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

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

    • Вычислите HMAC-SHA512 для строки на основе productId и userId (или subscriptionId) и параметра запроса salt.

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

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

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

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

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

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

Пример кода

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

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

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

Код 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
}

Node.js код для создания хэша 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');

Внимание

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