【问题标题】:How do I secure an API that is used in a JavaScript/Ajax client [apigee]?如何保护 JavaScript/Ajax 客户端 [apigee] 中使用的 API?
【发布时间】:2013-11-29 03:03:53
【问题描述】:

我使用 Apigee 作为私有 REST API 的代理,它允许对我的数据库进行基本的 CRUD 操作。前端开发人员想直接从 JavaScript/Ajax 调用我的 API,所以我不能使用基本的 API 密钥身份验证,因为任何人都可以查看 JS 的源代码并在我的 API 上调用可能具有破坏性的方法(我是一个远离起源的人)浏览器中的策略,但这不会阻止某人在浏览器之外执行 curl 并调用我的 API)。

最好的方法是什么?一旦用户通过身份验证并在他的 Ajax 调用中使用它,UI 开发人员能否以某种方式使用 OAUTH 为每个会话获取访问令牌?但即便如此,那个用户就不能查看 JS 源代码并通过 curl 做一些讨厌的事情吗?

提前致谢!

【问题讨论】:

  • 浏览器能做的,用户也能做。

标签: javascript ajax oauth-2.0 apigee


【解决方案1】:

OAuth v2 应该可以解决您的问题。 Apigee 网站上有多篇文章和资源,它们讨论了何时最好使用 OAuth v1 与 OAuth v2。 http://apigee.com/docs/content/apigee-oauth-frequently-asked-questions,三足 OAuth 策略可能最适合您:http://apigee.com/docs/gateway-services/content/oauth。 Apigee 网站上有一个示例。

【讨论】:

  • 我的 API 不像 Facebook 那样代表最终用户请求资源。它更像是一个远程后端数据访问层,具有跨我的产品模型和客户模型的 CRUD 操作。一种操作可能是从数据库中获取一些与客户无关的参考数据。鉴于此,是否仍然可以保护对 Ajax 代码的这些服务的访问,或者我是否应该要求开发人员在 Ajax 和我的 API 之间创建一个层,以便无法从页面源获取 API 密钥?
【解决方案2】:

所以您想授权访问者访问您的第 3 方网站,并确保他们不会做出任何滥用行为?

对此没有安全模型。一旦您授权用户/会话/浏览器为免费游戏,他就可以为所欲为。


所以退后一步,您想防止哪些滥用行为?也许您想阻止未知的第三方使用您的服务。在这种情况下,您可以在水下设置 API 密钥身份验证,从而为您提供临时会话密钥。

有 3 个派对。用户 (u)、使用您的 API 的第 3 方 (3) 以及您 (y)。

  • u3 请求会话密钥
  • 3 使用他的 API 密钥向 y 发出水下请求
  • y 验证 API 密钥并将会话密钥发送回 3
  • 3 将会话密钥交给u
  • uy 发出服务请求

如果3 永远无法获得会话密钥,您的服务对于未知的第三方是安全的。

【讨论】:

    猜你喜欢
    • 2014-08-13
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2012-04-24
    • 2020-05-14
    • 1970-01-01
    • 2021-02-20
    • 2021-06-09
    相关资源
    最近更新 更多