如何保护JavaScript/Ajax客户端[apigee]中使用的API?
我使用Apigee作为私有RESTAPI的代理,它允许对我的数据库进行基本CRUD操作。前端开发人员希望直接从JavaScript/Ajax调用我的API,因此我不能使用基本的API密钥身份验证,因为任何人都可以查看JS的源代码,并在我的API上调用潜在的破坏性方法(我是浏览器中的异地策略,但这不会阻止有人在浏览器之外执行curl和调用我的API) 最好的方法是什么?一旦用户通过身份验证并在其Ajax调用中使用OAUTH,UI开发人员能否以某种方式使用OAUTH为每个会话获取访问令牌?但即使如此,该用户不能查看JS源代码并通过curl做些令人讨厌的事情吗如何保护JavaScript/Ajax客户端[apigee]中使用的API?,javascript,ajax,oauth-2.0,apigee,Javascript,Ajax,Oauth 2.0,Apigee,我使用Apigee作为私有RESTAPI的代理,它允许对我的数据库进行基本CRUD操作。前端开发人员希望直接从JavaScript/Ajax调用我的API,因此我不能使用基本的API密钥身份验证,因为任何人都可以查看JS的源代码,并在我的API上调用潜在的破坏性方法(我是浏览器中的异地策略,但这不会阻止有人在浏览器之外执行curl和调用我的API) 最好的方法是什么?一旦用户通过身份验证并在其Ajax调用中使用OAUTH,UI开发人员能否以某种方式使用OAUTH为每个会话获取访问令牌?但即使如此
提前感谢!那么你想授权第三方网站的访问者,并确保他们不会做任何虐待行为 这没有安全模型。一旦你授权用户/会话/浏览器,这就是免费游戏,他可以做任何他想做的事
退一步,你想防止什么样的滥用?也许你想阻止未知的第三方使用你的服务。在这种情况下,你可以在水下设置API密钥身份验证,它会给你一个临时会话密钥 共有三方。用户(u)、使用API的第三方(3)和您(y)
从u
3
使用API密钥向3
发出水下请求y
验证API密钥并将会话密钥发送回y
3
将会话密钥交给3
u
服务是否向u
y
如果
3
永远无法获得会话密钥,您的服务对未知的第三方是安全的。那么您想授权访问您的第三方网站,并确保他们不会做任何滥用的事情吗
这没有安全模型。一旦你授权用户/会话/浏览器,这就是免费游戏,他可以做任何他想做的事
退一步,你想防止什么样的滥用?也许你想阻止未知的第三方使用你的服务。在这种情况下,你可以在水下设置API密钥身份验证,它会给你一个临时会话密钥 共有三方。用户(u)、使用API的第三方(3)和您(y)
从u
3
使用API密钥向3
发出水下请求y
验证API密钥并将会话密钥发送回y
3
将会话密钥交给3
u
服务是否向u
y
如果
3
永远无法获得会话密钥,则您的服务对未知的第三方是安全的。OAuth v2应该可以解决您的问题。Apigee网站上有多篇文章和资源,讨论何时最好使用OAuth v1和OAuth v2。
,一个三条腿的OAuth策略可能最适合您:。Apigee网站上有一个这样的例子。OAuth v2应该可以解决您的问题。Apigee网站上有多篇文章和资源,讨论什么时候最好使用OAuth v1和OAuth v2。
,一个三条腿的OAuth策略可能最适合您:。Apigee网站上有一个这样的例子。浏览器可以做的任何事情,用户也可以做。浏览器可以做的任何事情,用户也可以做。我的API不像Facebook那样代表最终用户请求资源。它更像是一个远程后端dat在我的产品模型和客户模型中都有CRUD操作的访问层。一个操作可能是从数据库中获取一些与客户无关的参考数据。鉴于此,是否仍有可能通过Ajax代码确保对这些服务的访问,或者我是否应该要求开发人员在jax和我的API,因此无法从页面源获取API密钥?我的API不像Facebook那样代表最终用户请求资源。它更像是一个远程后端数据访问层,在我的产品模型和客户模型中都有CRUD操作。一个操作可能是获取一些参考数据om是与客户无关的数据库。考虑到这一点,是否仍然可以通过Ajax代码确保对这些服务的访问,或者我是否应该要求开发人员在Ajax和我的API之间创建一个层,以便无法从页面源中获取API密钥?