背景:我正在使用 node.js 和 express 来创建 API。我已经在我的 API 服务器中以标准的消费者/用户密钥/秘密方式实现了 OAuth(与 Twitter、Facebook 等相同的方式)。我希望第 3 方能够以与这些常见 API 相同的方式连接到我的 API。
通常,客户端会与应用程序令牌/秘密连接(例如,您以 Facebook 开发人员的身份创建 Facebook 应用程序,这些都提供给您)。但是,有时客户端无法为应用程序提供秘密,因为代码是以不安全的方式实现的。具体来说,我指的是 Javascript 库。例如,开发人员不希望在 Javascript 代码中公开他们的应用程序机密,因为它是明文并且可能被恶意用户读取。
我注意到 Facebook 避免了这个问题。开发人员只需向 Javascript 库提供应用程序令牌(不是秘密)。我不明白如何在不从根本上使我的库不安全的情况下为我的 API 提供类似的选项。即,如果 Javascript 客户端库向 API 发出请求而没有提供安全的令牌/秘密,那么 OAuth API 如何对这些请求进行身份验证?
从理智上讲,我能想到的最佳解决方案是通过 HTTPS 连接在 Javascript 客户端库和 API 服务器之间进行某种令牌切换,以便返回一个秘密供库使用。不过,我不太确定如何确保此交接以防止欺骗。