【问题标题】:REST authentication internal project (iPhone to grails app) using 2 legged oauth?使用 2 条腿 oauth 的 REST 身份验证内部项目(iPhone 到 grails 应用程序)?
【发布时间】:2010-12-13 08:19:29
【问题描述】:

我正在创建一个 iPhone 项目,并将通过 REST 与服务器进行通信。我将发送从另一个服务发起的推送通知。我想验证从 iPhone 到我的服务器的所有通信(例如,与服务器同步通知,因为不能保证推送请求通过)

2 legged Oauth 似乎是理想的解决方案,但是关于它的信息并不多,尤其是因为大多数库似乎面向消费者而不是提供者。我应该使用什么库?

Oauth 是否矫枉过正?如果是这样,你有什么建议?我目前正在寻找最简单的解决方案;如果我要花一个多星期的时间来实施 Oauth,那根本不值得。

谢谢

【问题讨论】:

    标签: iphone grails oauth


    【解决方案1】:

    2 条腿的 oauth 可以在那里完成工作。

    2 腿是相对基本的,并且更容易实现那个 3 腿(例如,不需要跟踪令牌)。所有 2-legged oauth 所做的就是根据客户端和服务器之间的共享密钥生成您发送的请求的签名。然后服务器验证签名是否正确。差不多就这些了。

    可能有一些适用于 iPhone 的库可以为您完成签名请求的大部分工作,而且肯定有适用于大多数 Web 服务器语言的库来验证签名。

    在高层次上,这是您想要做的(来自the oauth spec):

    • 以某种方式在服务器和 iphone 客户端上获取共享密钥(密码、随机生成的字符串等) - 这必须超出范围,而不是作为请求的一部分(即,将其硬编码到每个组件中,或放入配置文件)。假设您使用 HMAC-SHA1 进行签名,而不是 RSA-SHA1 - 如果是 RSA,则改为共享公钥。
    • 将所有请求参数、URL、帖子正文等组合成一个字符串,考虑排序等。
    • 通过计算带有密钥的 HMAC-SHA1 哈希字符串来生成请求的签名。
    • 将签名附加到请求中
    • 发送到服务器
    • 服务器收到请求。
    • 服务器使用与客户端(和密钥)相同的算法计算签名
    • 如果服务器上生成的签名与客户端发送的签名匹配,则请求受信任,否则拒绝访问。

    通常您不必自己实现所有这些。大多数库都允许您生成签名并根据 2-legged oauth 的要求对其进行验证。

    【讨论】:

      【解决方案2】:

      我写了一篇关于稍作修改的 OAuth 其余身份验证的快速文章。希望所使用的一些技术对您有所帮助。

      http://www.flowmessenger.com/blog/2009/11/10/iphone-and-secure-restful-authentication.html

      有可用于 iphone 的 hmac-sha1/hmac-md5 库,我相信 amazon sdk 有。对于 php,有内置的 hmac-sha1/hmac-md5 函数。所以你只需要创建一个包含你想要散列的所有请求参数/urls/body/etc 的字符串,并在其上使用 hmac-sha1/hmac-md5,并将签名添加为请求参数,然后比较它服务器通过重新创建签名。

      我谈到了一些您想要考虑以防止滥用您的网络服务的事情,例如添加时间戳作为哈希的一部分。

      我在我的服务器上使用 cakephp 框架,但我必须编写一个自定义组件来进行 RESTful 身份验证,但这并不难。您还需要在共享密码短语查找中使用 memcache,因为如果您在数据库中为每个请求进行查找,这将破坏您在负载下的数据库(如果您在数据库中存储会话也是如此)。

      【讨论】:

        猜你喜欢
        • 2019-12-27
        • 1970-01-01
        • 2013-07-22
        • 2014-02-07
        • 2015-06-20
        • 1970-01-01
        • 2011-02-24
        • 2012-12-13
        • 2017-03-10
        相关资源
        最近更新 更多