0

我有一个 ASP.NET MVC 应用程序 - 网站和 API 控制器。我想使用 Azure API 管理来管理这些 API,但保留相同的 URL,以便我们的消费者无缝连接。我们在此 Web 应用程序的应用程序服务上设置了自定义域,当前用于提供站点和 API(例如网站:xyz.com、API:xyz.com/api1、xyz.com/api2 等)。 )。我们还使用 AAD 进行身份验证。并将重定向 URI 设置到自定义域 (xyz.com)。目前一切都很好。

在我们配置 API 管理以公开我们的 API 并可能将其用作传递之后,就会出现问题。为了确保在引入 API 管理后 URL 保持不变,我们将自定义域设置为 API 管理实例本身,并将其从应用程序中删除。服务。这就是我们当前设置的样子 -->

用户点击 xyz.com,请求按如下方式进行 ->流量管理器-> APIM(xyz.com) ->应用服务(xxx.azurewebsites.net)

在上述最后一点之后,AAD 身份验证。应该启动并在成功验证后获得访问令牌。它应该重定向用户并且页面应该加载。但事实并非如此。相反,我们得到一个空白页面,如果我们刷新它,那么只有这样它才会继续进行身份验证。并加载页面。

我们尝试将重定向 URI 设置为自定义域 (xyz.com) 以及 Azure 生成的基本应用服务名称 (xxx.azurewebsites.net)。

直接点击 API url(例如 xyz.com/api1)可以正常工作。它通过 APIM 并按预期响应。唯一的问题是该网站未按上述方式加载。

当我们将 APIM 排除在外,并再次将自定义域设置回应用服务时,一切都按预期工作。

我试图弄清楚我们是否以某种方式错误地配置了我们的资产,或者 APIM 是否不支持以这种方式传递网站。这里的任何想法/建议将不胜感激!

4

1 回答 1

0

哇,那是很多文字。好吧,让我们来看看:

访客 -> 流量管理器 -> APIM -> 后端(您的网站) - 好的。

这就像使用 APIM 的一种常见方式,它应该可以工作。但是,也许您的政策设置不正确?

您是否构建了您的产品/API/操作?您是否看到来自 APIM 的请求访问您的站点?你得到什么回应?

现在,当然,您需要定义和设置 APIM(产品、API 和每个操作)以将其传递给您的后端。这意味着如果您(作为访问者)需要列出所有产品,则需要通过 APIM 操作 (sed GetProducts )。您的请求将通过入站策略传递(根据需要调整和构建请求),将其传递给后端(使用自定义 API 传递给您的网站),然后响应将从后端发送回访问者。

现在到此:为了保护 APIM 中的 Web API 后端,您可以将 OAuth 2.0 授权与 Azure AD 一起使用:大图概述:

  1. 在 Azure AD 中注册一个应用程序(用于您的后端)以表示 API
  2. 在 Azure AD 中注册另一个应用程序(客户端)以表示将调用您的 API 的客户端应用程序
  3. 我想这是您授予允许客户端应用程序调用后端应用程序的权限
  4. 当然,添加validate-jwt策略来验证每个传入请求的 OAuth 令牌

在这里阅读 om https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-protect-backend-with-aad

于 2020-12-01T20:16:30.270 回答