Azure API 管理 - 如何保护订阅密钥
Azure API Management - How to secure Subscription key
技术栈
- API 部署在 WebApp
- API 已部署管理并将 WebApp 配置为 Web 服务 URL。
- UI 在 Angular 应用程序中开发,该应用程序调用 API 管理端点以在 UI.
上显示数据
- 实施 IP 身份验证以确保只有允许的用户才能访问 UI & API
- 在产品级别启用订阅,并与客户端共享密钥以供 API 调用
- 为 UI 创建单独的产品并在 UI 中使用订阅密钥来调用 API 并显示数据
现在在这种情况下,订阅密钥将通过浏览器 -> 检查 -> 网络选项卡可见
我们要确保用户不能使用 UI 键进行 API 呼叫
使用 Proxy 会隐藏密钥,但现在任何人都可以调用代理 url 来获取数据。
如何保证安全?
将您的密钥存储在 Azure 密钥保管库中并从您的前端应用程序访问,
https://medium.com/@ayanfecrown/azure-key-vault-node-js-step-by-step-tutorial-af131a78e220
正如 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 直接呼叫与其他 application/tools 像邮递员。
感谢大家的帮助。
你找到解决办法了吗?我使用 nginx 作为代理服务器,并在调用微服务时将订阅密钥保存为 proxy_set_header subscription-key abc-def
。这样订阅密钥就不会暴露给 UI 并将通过 nginx 转发给 API 管理服务。
技术栈
- API 部署在 WebApp
- API 已部署管理并将 WebApp 配置为 Web 服务 URL。
- UI 在 Angular 应用程序中开发,该应用程序调用 API 管理端点以在 UI. 上显示数据
- 实施 IP 身份验证以确保只有允许的用户才能访问 UI & API
- 在产品级别启用订阅,并与客户端共享密钥以供 API 调用
- 为 UI 创建单独的产品并在 UI 中使用订阅密钥来调用 API 并显示数据
现在在这种情况下,订阅密钥将通过浏览器 -> 检查 -> 网络选项卡可见
我们要确保用户不能使用 UI 键进行 API 呼叫 使用 Proxy 会隐藏密钥,但现在任何人都可以调用代理 url 来获取数据。
如何保证安全?
将您的密钥存储在 Azure 密钥保管库中并从您的前端应用程序访问, https://medium.com/@ayanfecrown/azure-key-vault-node-js-step-by-step-tutorial-af131a78e220
正如 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 直接呼叫与其他 application/tools 像邮递员。
感谢大家的帮助。
你找到解决办法了吗?我使用 nginx 作为代理服务器,并在调用微服务时将订阅密钥保存为 proxy_set_header subscription-key abc-def
。这样订阅密钥就不会暴露给 UI 并将通过 nginx 转发给 API 管理服务。