如何保护 Azure API 管理中的 API 然后通过 Angular (adal-angular5) 访问?

How to secure an API in Azure API Management to then access via Angular (adal-angular5)?

背景

  1. 我在 Azure-API-Mangement 中创建了一个测试 API。只要我提供 "subscription-key",我就能从 API 获取数据。我不知道如何使用 Azure AD 为 link 设置安全性。

  2. 我正在 Angular 中创建一个 SPA,并且我正在使用 adal-angular5。我遵循了这个 excellent guide on SpikesApps ,但是我使用的是 adal-angular5 而不是 adal-angular4。我能够获得登录用户的 1296 个字符令牌。请参阅下面的屏幕截图:

上面 linked 的 SpikesApps 指南连接到作为 Azure WebApp 创建的 API,而不是 Azure-API-Management 的一部分。该指南使用用户令牌并在 HTTP get 中将其作为 header 提交。 (授权:Bearer [user 1296 char token])。

我对 Azure 的有限了解告诉我,为 Azure WebbApp API 设置安全性不同于 Azure-API-Management 中的 API。

我的情况与 SpikesApps 指南的不同之处(因此我被卡住了)是我想安全地连接到 API,它是 Azure-API-Management 的一部分。

我的问题

  1. 是否可以在 Azure-API-Management 中保护 API 以便我的 Angular SPA 可以通过提供 Authorization: Bearer <user 1296 char token> header? (即根据 SpikesApps guide 中访问的 API)。

  2. 如果没有,我有什么选择?

  3. 我在 Azure-API-Management 中阅读了一些关于 "validate-jwt" 的 API 政策。如果这是唯一的方法,我如何获得 JWT?我假设 JWT 与我已有的 1296 字符用户令牌不同?

屏幕截图

(显示 adal-angular5 在我的 Angular SPA 中获取的用户信息)

(adal-angular5 如何将授权 header 添加到获取请求的示例。https://www.npmjs.com/package/adal-angular5

在发布上述问题后一个小时就找到了解决方案(在此之前我浪费了很多时间!)。

需要将 validate-jwt 添加到 API 的入站策略。

我是按照此页面上的(部分)说明进行操作的:https://docs.microsoft.com/en-us/azure/api-management/api-management-howto-protect-backend-with-aad#configure-a-jwt-validation-policy-to-pre-authorize-requests

真的只需要做到以下几点:

  1. 在 Azure AD 中创建一个 "App registration" 以与 APIM 中的 API 相关联。我们称它为 backend-app
  2. 在 API 管理中,修改相关 API 的入站组件的策略,按照下面的屏幕截图添加代码
  3. 发出 GET 请求时,header 需要包括:<Authorization: Bearer {USER_TOKEN}>(根据上面原始问题中的指南)
  4. 不要忘记在 GET 请求中包含 Subscription-Key。