2013-11-15 55 views
1

我使用Apigee作为私有REST API的代理,该API允许在我的数据库上进行基本的CRUD操作。前端开发人员想直接从JavaScript/Ajax调用我的API,所以我不能使用基本的API Key身份验证,因为任何人都可以查看JS的源代码并在API上调用可能具有破坏性的方法(我是远离原点的浏览器中的策略,但这不会阻止某人在浏览器之外进行卷曲并调用我的API)。如何保护在JavaScript/Ajax客户端[apigee]中使用的API?

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

在此先感谢!

+0

任何浏览器都可以做,用户也可以做。 – SLaks

回答

0

所以你想授权访问者到你的第三方网站,并确保他们不能做任何虐待?

这里没有安全模型。一旦你授权用户/会话/浏览器它是免费游戏,他可以做任何他想做的事情。


因此,回到这里,你想防止什么滥用?也许你想阻止未知的第三方使用你的服务。在这种情况下,您可以在水下设置API密钥身份验证,为您提供临时会话密钥。

有3方。用户(u),使用您的API的第三方(3)和您(y)。

  • u请求从3
  • 3会话密钥确实水下请求y与他的API密钥
  • y验证API密钥,并发送回一个会话密钥3
  • 3手中会议键为u
  • u是否提供服务请求至y

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

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网站上有一个例子。

+0

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

相关问题