为用户创建订阅的 Azure API 管理 REST 调用(缺失)
Posted
技术标签:
【中文标题】为用户创建订阅的 Azure API 管理 REST 调用(缺失)【英文标题】:Azure API Management REST call to create subscription for user (missing) 【发布时间】:2019-06-01 11:45:53 【问题描述】:我正在尝试使用here 提供的示例从 Azure API 管理委派产品订阅。我的原型有一个有效的用户身份验证委托,但是产品订阅委托令人困惑。
在用户登录委托期间,我收到 APIM 对我的委托页面的请求,并根据上面的示例链接进行处理,没有问题。在产品订阅委托期间,首先调用我的登录页面;不是委托页面。这引出了我的第一个系列问题:
-
有人能解释一下为什么产品订阅委托与用户身份验证委托的流程根本不同吗?
如果登录委派页面(根据上面引用的示例)通过检查
User.Identity.IsAuthenticated
来处理用户身份验证,为什么产品委派不能做同样的事情,为什么它会被发送到登录页面而不是委派页面?
我已经通过使用登录页面来评估用户是否首先通过身份验证,然后将他们重定向到returnUrl
来处理上述问题,如下所示:
if (User.Identity.IsAuthenticated)
return LocalRedirect(returnUrl);
APIM 提供的returnUrl
的值包含以下变量:
/Identity/Account/Manage/Delegate
productId = [productId]
userId = [userId]
操作=Subscribe
盐=[salt]
sig = [sig]
由于这些是 APIM 的returnUrl
中提供的所有变量,我有以下问题:
按照documentation about subscription using APIM REST API,如何确定以下所需属性:
subscriptionId
resourceGroupName
serviceName
sid
另外对于请求正文,如何根据this reference确定properties.scope
。
作为测试,我在包含以下代码行的端点上调用PUT
方法之前在代码中设置了一个断点。我使用 Postman 通过复制 VS2017 中的 Authorization
标头和所有相关的标头/正文数据来测试创建订阅。我能够返回一个 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 门户中,它会在哪里?它也不会显示在用户的个人资料中。
如果我没有向 APIM REST API 提供所有“必需”参数,我如何才能在
PUT
方法上获得 201
响应?
【问题讨论】:
【参考方案1】:我找到了解决方案并想分享。
我可以使用第 9 频道视频中介绍的方法。我只是使用了错误的属性。而不是userId
,它应该是ownerId
。在我的订阅上运行GET
后,我注意到我可以看到它们。它们与用户没有关联,因此不会出现在 Azure APIM 门户中。
另一个关键缺失是通知。如果您遗漏了 &notify=true
查询字符串参数,您将不会在有人订阅您的 API 时收到通知。当您的 API 需要批准时,这尤其麻烦。
这似乎是一个潜在的产品错误,因为您不应该创建“无所有者”订阅。如果您不知道在哪里看,它几乎不可能找到。
【讨论】:
“userId”在 API 版本 2018-06-01-preview 中被替换为“ownerId”,您使用的是那个版本吗?如果您使用 2018-01-01,它应该都按照第 9 频道的视频。预览版引入了一些新的东西,在那些不与特定用户绑定的订阅中——这就是你最终创建的内容,以及“范围”属性。有关不同 API 版本的详细信息,请参阅此处github.com/Azure/azure-rest-api-specs/tree/master/specification/…。以上是关于为用户创建订阅的 Azure API 管理 REST 调用(缺失)的主要内容,如果未能解决你的问题,请参考以下文章
Azure Resource Manager API用户的订阅范围授权