Я пытаюсь делегировать подписку на продукт из Azure API Management, используя приведенный пример здесь . Мой прототип имеет действующее делегирование аутентификации пользователя, однако делегирование подписки на продукт вызывает недоумение.
Во время делегирования имени пользователя я получаю запрос от APIM на мою страницу делегирования и обрабатываю его в соответствии с примером ссылки выше без проблем. Во время делегирования подписки на продукт сначала выполняется звонок на мою страницу входа в систему; не страница делегирования. Это приводит меня к моей первой серии вопросов:
- Может ли кто-нибудь объяснить, почему делегирование подписки на продукт в корне отличается от делегирования аутентификации пользователей?
- Если страница делегирования входа (согласно приведенному выше примеру) обрабатывает аутентификацию пользователя, установив
User.Identity.IsAuthenticated
, почему делегирование продукта не может сделать то же самое и почему оно будет отправлено на страницу входа, а не на страницу делегирования?
Я справился с вышеуказанной проблемой, используя страницу входа в систему, чтобы оценить, прошла ли аутентификация пользователя сначала, а затем перенаправить их на returnUrl
следующим образом:
if (User.Identity.IsAuthenticated)
{
return LocalRedirect(returnUrl);
}
Значение returnUrl
, предоставленное APIM, содержит следующие переменные:
- Путь =
/Identity/Account/Manage/Delegate
- productId =
[productId]
- userId =
[userId]
- операция =
Subscribe
- соль =
[salt]
- sig =
[sig]
Поскольку это ВСЕ переменные, указанные в returnUrl
от APIM, у меня есть следующие вопросы:
Следуя документации о подписке с использованием APIM REST API , как определить следующие обязательные свойства:
subscriptionId
resourceGroupName
serviceName
sid
Дополнительно для тела запроса, как вы определяете properties.scope
согласно этой ссылке .
В качестве теста я установил точку останова в коде непосредственно перед вызовом метода PUT
в конечной точке, содержащей следующую строку кода. Я использовал Postman для тестирования создания подписки, скопировав заголовок Authorization
в VS2017 и все соответствующие данные заголовка / тела. Мне удалось получить ответ 201
, указывающий, что подписка была создана, однако она нигде не отображается на портале APIM, и у меня, конечно, не было многих «обязательных» свойств, как определено в статье документации:
response = await client.PutAsync("/subscriptions/" + subscriptionId + "?api-version=" + apiVersion, new StringContent(ApimSubscriptionJson, Encoding.UTF8, "text/json"));
Вот тело моего тестового вызова API:
{
"userId" : "/users/c22afea6-3e9c-4b85-87a6-2d5e97e259cf",
"scope" : "/products/ring-0-beta-access"
}
Исходя из этой странности, у меня есть следующие дополнительные вопросы:
- Если подписка на продукт действительно создана, где она будет, если не на портале Azure APIM? Он также не отображается в профиле пользователя.
- Как я могу получить ответ
201
на метод PUT
, если я не предоставил API-интерфейсу REST APIM все необходимые параметры?