Azure API 为用户创建订阅的管理 REST 调用(缺失)

Azure API Management REST call to create subscription for user (missing)

我正在尝试使用提供的示例 here 从 Azure API 管理中委派产品订阅。我的原型有一个有效的用户身份验证委托,但产品订阅委托令人困惑。

在用户登录委托期间,我收到了来自 APIM 到我的委托页面的请求,并根据上面的示例 link 毫无问题地处理了它。在产品订阅委托过程中,首先调用我的登录页面;不是代表团页面。这引出了我的第一个系列问题:

  1. 有人可以解释为什么产品订阅委托与用户身份验证委托的流程从根本上不同吗?
  2. 如果登录委托页面(按照上面引用的示例)通过检查 User.Identity.IsAuthenticated 来处理用户身份验证,为什么产品委托不能做同样的事情,为什么它会被发送到登录页面而不是委派页面?

我已经通过使用登录页面首先评估用户是否通过身份验证来处理上述问题,然后将他们重定向到 returnUrl,如下所示:

if (User.Identity.IsAuthenticated)
{
    return LocalRedirect(returnUrl);
}

returnUrl 的值,由 APIM 提供,包含以下变量:

由于这些是 APIM 的 returnUrl 中提供的所有变量,我有以下问题:

  1. documentation about subscription using APIM REST API 之后,您如何确定以下必需属性:

    • subscriptionId
    • resourceGroupName
    • serviceName
    • sid
  2. 另外对于请求body,如何根据this reference.

  3. 确定properties.scope

作为测试,我在调用包含以下代码行的端点上的 PUT 方法之前在代码中设置了一个断点。我使用 Postman 通过复制 VS2017 中的 Authorization header 和所有相关的 header/body 数据来测试创建订阅。我能够返回一个 201 响应,表明订阅已创建,但是它没有出现在任何地方的 APIM 门户中,而且我当然没有很多 "required" 文档文章中定义的属性:

response = await client.PutAsync("/subscriptions/" + subscriptionId + "?api-version=" + apiVersion, new StringContent(ApimSubscriptionJson, Encoding.UTF8, "text/json"));

这是我对 API:

的测试调用的 body
{
    "userId" : "/users/c22afea6-3e9c-4b85-87a6-2d5e97e259cf",
    "scope" : "/products/ring-0-beta-access"
}

基于这个奇怪的问题,我有以下额外的问题:

  1. 如果确实创建了产品订阅,如果不在 Azure APIM 门户中,它会在哪里?它也不会显示在用户的个人资料中。
  2. 如果我没有给 APIM REST API 所有 'required' 参数?

我找到了解决方案并想分享。

我可以使用第 9 频道视频中介绍的方法。我只是用错了 属性。而不是 userId,它应该是 ownerId。我注意到在我的订阅中 运行 一个 GET 之后,我可以看到它们。它们与用户没有关联,因此不会出现在 Azure APIM 门户中。

另一个关键问题是通知。如果您省略 &notify=true 查询字符串参数,当有人订阅您的 API 时您将不会收到通知。当您的 API 需要批准时,这尤其麻烦。

这似乎是一个潜在的产品错误,因为您应该无法创建 'owner-less' 订阅。如果你不知道去哪里找,几乎不可能找到。