【问题标题】:Application token/secrets when creating an OAuth API创建 OAuth API 时的应用程序令牌/机密
【发布时间】:2012-07-09 04:03:46
【问题描述】:

背景:我正在使用 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 服务器之间进行某种令牌切换,以便返回一个秘密供库使用。不过,我不太确定如何确保此交接以防止欺骗。

【问题讨论】:

    标签: node.js facebook-graph-api oauth


    【解决方案1】:

    在大多数情况下,遵循标准比实施某些自定义方式更好。 OAuth2 指定4 methods in the latest draft (28) 执行授权授予流程。 隐式流程是您在 Facebook 上看到的流程。

    正如标准所说:

    在隐式授权流程期间发布访问令牌时,授权服务器不会对客户端进行身份验证。在某些情况下,可以通过用于将访问令牌传递给客户端的重定向 URI 来验证客户端身份。访问令牌可能会暴露给资源所有者或其他有权访问资源所有者的用户代理的应用程序。

    隐式授权提高了某些客户端(例如作为浏览器内应用程序实现的客户端)的响应能力和效率,因为它减少了获取访问令牌所需的往返次数。然而,这种便利性应该与使用隐式授权的安全隐患进行权衡,尤其是当授权码授权类型可用时。

    它有一些安全缺陷。

    但据我所知,其他方法对您不起作用,因为它们会将秘密暴露给客户端(第三方网站所有者)或资源所有者(用户),因此您应该继续使用这个。

    【讨论】:

    • 啊,我读了几遍,但现在说得通了。肯定会为我的实现增加一些工作,但你是对的,这听起来是我最好的选择。不过,使用重定向 URL 进行身份验证有一定的优雅之处。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2016-10-29
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多