Azure API管理-如何保护订阅密钥

时间:2019-07-19 11:10:29

标签: angular security azure-web-app-service azure-api-management

技术栈

  • 在WebApp中部署的API
  • 已部署API管理,并将WebApp配置为Web服务URL。
  • 在Angular应用程序中开发的UI,该API调用API管理端点以在UI上显示数据。
  • 实施IP身份验证以确保只有允许的用户才能访问UI和API
  • 在产品级别启用了订阅,并且与客户端共享了API调用的密钥
  • 为UI创建了单独的产品,并且UI中使用了订阅密钥来调用API和显示数据

现在,在这种情况下,订阅密钥将通过浏览器->检查->网络标签可见

我们要确保用户不能使用UI密钥进行API调用 使用代理将隐藏密钥,但是现在任何人都可以调用代理url来获取数据。

如何使其安全?

enter image description here

3 个答案:

答案 0 :(得分:1)

您找到任何解决方案了吗?我使用nginx作为代理服务器,并在调用微服务时将订阅密钥保留为proxy_set_header subscription-key abc-def。这样,订阅密钥就不会暴露给UI,而是会通过nginx转发给API Management Service。

答案 1 :(得分:0)

将密钥存储在Azure密钥保险库中,并从前端应用程序进行访问, https://medium.com/@ayanfecrown/azure-key-vault-node-js-step-by-step-tutorial-af131a78e220

答案 2 :(得分:0)

如nmbrphi,garethb所述,我们可以控制最终用户在浏览器网络标签中看到的内容。

并且由于我们在系统中没有可用的用户身份验证,而仅具有IP身份验证,因此无法直接通过API控制UI密钥的使用。

为了确保我们有更安全的UI调用,我们实现了可用于任何javascript应用程序的自定义逻辑

参考 http://billpatrianakos.me/blog/2013/09/12/securing-api-keys-in-a-client-side-javascript-app/

这至少帮助我区分了UI调用API和直接调用的API与邮递员之类的其他应用程序/工具。

感谢您的帮助。