创buildOAuth API时的应用程序令牌/机密

背景:我正在使用node.js来表示创build一个API。 我已经在API服务器中以标准的用户/用户密钥/秘密方式实现了OAuth(与Twitter,Facebook等一样)。 我希望第三方连接到我的API,再次以与这些公共API相同的方式。

通常情况下,客户端将连接一个应用程序令牌/秘密(例如,您创build一个Facebook应用程序作为Facebook开发人员,这些给你)。 但是,有时候,客户端不能为应用程序提供秘密,因为代码是以不安全的方式实现的。 具体来说,我指的是Javascript库。 例如,开发人员不希望在Javascript代码中暴露他们的应用程序秘密,因为它是明文的,可以被恶意用户读取。

我注意到Facebook避免了这个问题。 开发人员只需要向Javascript库提供一个应用程序令牌(而不是秘密)。 我不明白如何为我的API提供类似的选项,而不会从根本上使我的库不安全。 也就是说,如果请求是由Javascript客户端库向API提出的,而没有提供安全的令牌/秘密,那么这些请求如何通过OAuth API进行身份validation?

在理智上,我能想到的最好的解决scheme是通过HTTPS连接在Javascript客户端库和API服务器之间进行某种令牌转换,以便为库返回一个秘密。 不过,我不确定如何确保这个切换,以防止恶搞。

在大多数情况下,遵循标准比实施一些定制的方式更好。 OAuth2 在最新草案(28)中指定了4种方法来执行授权授权stream程。 隐式stream程就是您在Facebook上看到的stream程。

正如标准所说的那样:

在隐式授权stream程中发出访问令牌时,授权服务器不会对客户端进行身份validation。 在某些情况下,可以通过用于将访问令牌传递给客户端的redirectURI来validation客户端身份。 访问令牌可能会暴露给资源所有者或其他访问资源所有者的用户代理的应用程序。

隐式授权提高了某些客户端(如客户端实现为浏览器内应用程序)的响应能力和效率,因为它减less了获取访问令牌所需的往返次数。 但是,这种便利应该与使用隐式授权的安全性相关,特别是在授权代码授权types可用的情况下。

它有一些安全缺陷。

但据我所知,其他方法不适合你,因为它们向客户端(第三方网站所有者)或资源所有者(用户)泄露秘密,所以你应该留下来。