OAuth完全Javascript访问,安全问题?

OAuth完全Javascript访问,安全问题?,javascript,api,oauth,Javascript,Api,Oauth,我正在为我的API实现服务器端OAuth。 我看到Google允许完整的javascript编写的应用程序使用它的API 在这种情况下,因为我们在“查看源”环境中,所以没有使用客户机机密,因此无法确定应用程序标识 例如: 如果我看到一个完整的谷歌javascript应用程序,我只需要查看源代码,获取客户端密钥,然后在我自己的网站上发布一个经过编辑的代码版本。 如果用户在第一个网站上接受了该应用程序,我将能够使用他的数据(因为该应用程序已被接受,接受部分将对用户完全不可见) 即使用户必须重新接受应

我正在为我的API实现服务器端OAuth。 我看到Google允许完整的javascript编写的应用程序使用它的API

在这种情况下,因为我们在“查看源”环境中,所以没有使用客户机机密,因此无法确定应用程序标识

例如: 如果我看到一个完整的谷歌javascript应用程序,我只需要查看源代码,获取客户端密钥,然后在我自己的网站上发布一个经过编辑的代码版本。 如果用户在第一个网站上接受了该应用程序,我将能够使用他的数据(因为该应用程序已被接受,接受部分将对用户完全不可见)

即使用户必须重新接受应用程序,如果他接受它,我也可以使用第一个应用程序标识访问

这种方法让我有点害怕,我很惊讶谷歌没有在文档中或授权阶段暴露不同的风险。 我一定错过了什么。。。你能帮我吗

我不确定我是否能理解,但如果你有任何问题,请提问


(为我的英语感到抱歉)

你说得对。应用程序中可见的数据是
客户端id
客户端机密。当用户对您的应用程序进行身份验证时,您将获得一个
访问令牌
,您必须将其用于以下API请求。访问令牌通常存储在本地数据库中,对每个用户都是唯一的(甚至可能过期)

后果:有权访问
客户端id
客户端机密
的邪恶用户必须重新接受应用程序才能访问它。他无法直接访问它,因为他没有
访问令牌
。但在接受它之后,他可以访问所有数据


解决此问题的一种方法是在服务器端执行授权。您的服务器执行初始授权并存储
访问令牌
。当您想从客户端访问API时,您可以从服务器(通过安全连接)获得
访问令牌
,您应该能够正常使用API,并且您的
客户端id
客户端机密
被隐藏。实现这一点的一个简单方法是。

我也很担心它,我读了很多书来熟悉它。实际上,有很多Web服务器允许纯javascript访问(例如facebook、google、mercadolibre)

这些公司向您请求一个有效的域服务器名称,即您的客户端id和客户端密码只有在您的web应用程序请求时才可用。也就是说,我(太)舒服了一点。伪造你的应用程序并不是那么容易,你11岁的侄子在尝试时会很不愉快

无论如何,我知道你可以对浏览器使用某种钓鱼攻击,让他们相信你在“your app domain.com”中。我不确定上述公司如何过滤此类攻击

思考:我的一个想法是,你可以将你的凭证存储在一个cookie中。在应用程序开始时使用REST URI,并将您的凭据存储在那里。只要我知道这是可能的小黑客访问饼干,但这将是一个额外的障碍

思考2:我不是移动开发者,所以我一直在问:如何在移动应用程序中解决这个问题。即使知道反编译应用程序并不容易,也有可能做到这一点

我不知道如何解决/适应客户端凭据存储,但我希望能为这一讨论做出贡献