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

时间:2018-05-17 01:07:25

标签: angular azure adal azure-api-management

背景

  1. 我在Azure-API-Mangement中创建了一个测试API。只要我提供" subscription-key"我就可以从API获取数据。我不知道如何设置安全性以与Azure AD链接。

  2. 我正在Angular中创建一个SPA,并使用adal-angular5。我已按照此excellent guide on SpikesApps进行操作,但使用的是 adal-angular5 而不是 adal-angular4 。我能够获得登录用户的1296个字符标记。见下面的截图:

  3. 上面链接的SpikesApps指南连接到作为Azure WebApp创建的API,而不是Azure-API-Management的一部分。该指南使用用户令牌并将其作为HTTP get中的标头提交。 (授权:承载[用户1296 char令牌])。

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

    我的情况与SpikesApps指南的不同(以及我为什么会卡住),是我​​想要安全地连接到属于Azure-API-Management的API。

    我的问题

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

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

    3. 我已经阅读了一些关于&#34; validate-jwt&#34; Azure-API-Management中的API策略。如果这是唯一的方法,我如何获得JWT?我假设JWT与我已经拥有的1296个char用户令牌不同?

    4. 屏幕截图

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

      Screenshot showing the userInfo object

      (adal-angular5如何将Authorization标头添加到get请求的示例。https://www.npmjs.com/package/adal-angular5

      adal-angular5 HttpService get example

1 个答案:

答案 0 :(得分:3)

在发布上述问题后的一小时内确定了解决方案(在此之前,我浪费了很多时间!)。

需要将 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中创建“应用程序注册”以与APIM中的API关联。我们称之为 backend-app
  2. 在API Management中,修改相关API的Inbound组件的策略,根据下面的屏幕截图添加代码
  3. 在发出GET请求时,标题需要包含:<Authorization: Bearer {USER_TOKEN}>(根据上述原始问题中的指南)
  4. 不要忘记在GET请求中包含Subscription-Key。
  5. enter image description here