【问题标题】:Protocol to secure a connection between a mobile device and a web service?保护移动设备和网络服务之间连接的协议?
【发布时间】:2009-06-30 17:52:47
【问题描述】:

我正在寻找一种协议来保护移动设备和网络服务之间的连接。我想确保只有移动设备才能对 Web 服务执行操作,反之亦然。数据不需要加密。

我知道 Oauth,但当您拥有 3 个不同的实体(服务器、消费者和身份验证)时,它似乎更用于保护连接。在这里,消费者和用户将是同一个人。

是否有一个简单的协议可以做到这一点(不需要用户登录然后像 Oauth 那样授权访问令牌)?

我需要在不同的平台上使用它,所以协议至少需要在 iPhone 和 PHP 上可用。

【问题讨论】:

    标签: iphone android authentication blackberry oauth


    【解决方案1】:

    您需要澄清“安全”的含义。究竟是什么?你在担心什么?

    也就是说,https(基于 SSL 的 http)是一个很好的起点,这将允许您向设备(或浏览器)验证网站并且无处不在。

    如果您想对设备进行身份验证,那就有点棘手了。您可以生成并存储一个共享密钥(一个随机数),并在第一次连接到该站点时,在 GET/POST 中提供它......这有很多变化,但简单的都源于建立一个共享密钥和其他任何事情都可能是矫枉过正。这将允许您识别同一设备在下次连接时再次连接。可以将其想象为设备登录所用的密码(但它不需要是一个词,而且可能不应该是)。

    这样做的困难在于,如果删除该程序,该秘密将丢失,并且取决于您想要做什么,这可能是一个问题,因为下次在同一设备上运行该程序时,您将需要建立一个新的秘密。在这种情况下,您将无法知道这次连接的设备与之前连接的设备相同。如果需要,您将需要使用某种重置机制,这很难做到,并且相当于验证用户而不是设备。

    注意,iphone 有一个唯一的标识符,但这并不是真正的秘密,并且提供它并不能真正提供任何证明给定设备正在连接的证据。提供它也没有什么坏处,但它更像是一个断言“我是设备 foo”,而不是身份证明。把它想象成登录的用户名部分——你仍然需要一些共享的秘密。

    【讨论】:

      【解决方案2】:

      我找到了解决方案:使用“2 legged Oauth”协议。

      这样,我坚持标准,我不必重新发明轮子,而且我有一个安全的解决方案。

      由于消费者和用户对我来说是相同的,我只是自动授权消费者在我看到消费者以用户身份登录时询问的“请求令牌”!

      我正在做的是:

      • 在 SSL 中:我以用户身份登录并向服务器请求消费者密钥/秘密
      • 服务器将我的用户密钥/秘密还给我
      • 在 SSL 中:我以用户身份登录并使用我的消费者密钥/秘密请求“请求令牌”
      • 服务器识别出我是用户,因此它自动授权请求令牌
      • 没有 SSL:我用我的“请求令牌”询问“访问令牌”
      • 服务器将我的访问令牌还给我
      • 我用它来安全地执行请求

      【讨论】:

        【解决方案3】:

        您可能会通过 HTTPS 连接使用共享密钥/单向加密散列来自行开发。

        然后,如果您想确保它只是特定设备,请在设备上对设备 ID + 时间戳 + 共享密钥进行哈希,将其作为参数传递给服务器,并在 PHP 上验证哈希一边。

        【讨论】:

        • 感谢约翰的回答,我认为这很简单。不过,该解决方案还应该包括一个随机数,以避免有人捕捉到请求并重播它。
        猜你喜欢
        • 2011-01-06
        • 1970-01-01
        • 2012-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多