我正在尝试使用here提供的示例从Azure API管理中委派产品订阅。我的原型具有有效的用户身份验证委托,但是产品订阅委托令人困惑。
在用户登录委派期间,我从APIM收到了一个对我的委派页面的请求,并根据上面的示例链接进行了处理,没有任何问题。在产品订购的委派过程中,首先会调用我的登录页面;不是委托页面。这使我想到了第一个问题:
User.Identity.IsAuthenticated
来处理用户身份验证,那么为什么产品委托不能这样做,为什么将其发送到登录页面而不是委托中页面?我已经通过使用登录页面来评估用户是否首先通过身份验证,然后将其重定向到returnUrl
,如下所述:
if (User.Identity.IsAuthenticated)
{
return LocalRedirect(returnUrl);
}
APIM提供的returnUrl
的值包含以下变量:
/Identity/Account/Manage/Delegate
[productId]
[userId]
Subscribe
[salt]
[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"
}
基于这种怪异,我还有以下其他问题:
201
方法上获得PUT
响应?答案 0 :(得分:1)
我找到了一个解决方案,想分享。
我可以使用第9频道视频中介绍的方法。我只是在使用错误的属性。代替userId
,它应该是ownerId
。在订阅上运行GET
后,我注意到可以看到所有内容。它们与用户没有关联,因此它们不会显示在Azure APIM门户中。
另一个重要的遗漏是通知。如果您省略了¬ify=true
查询字符串参数,那么当有人订阅您的API时,您不会收到通知。当您的API需要批准时,这尤其麻烦。
这似乎是潜在的产品错误,因为您不应该创建“无主”订阅。如果您不知道要看哪里,几乎就不可能找到它。