我正在寻找一种协议来保护移动设备和 Web 服务之间的连接。我想确保只有移动设备才能对 Web 服务执行操作,反之亦然。数据不需要加密。
我知道 Oauth,但是当您拥有 3 个不同的实体(服务器、消费者和身份验证)时,它似乎更用于保护连接。在这里,消费者和用户将是同一个人。
是否有一个简单的协议来做到这一点(不需要用户登录然后像 Oauth 那样授权访问令牌)?
我需要在不同的平台上使用它,因此该协议至少需要在 iPhone 和 PHP 上可用。
我正在寻找一种协议来保护移动设备和 Web 服务之间的连接。我想确保只有移动设备才能对 Web 服务执行操作,反之亦然。数据不需要加密。
我知道 Oauth,但是当您拥有 3 个不同的实体(服务器、消费者和身份验证)时,它似乎更用于保护连接。在这里,消费者和用户将是同一个人。
是否有一个简单的协议来做到这一点(不需要用户登录然后像 Oauth 那样授权访问令牌)?
我需要在不同的平台上使用它,因此该协议至少需要在 iPhone 和 PHP 上可用。
您需要澄清“安全”的含义。究竟是什么?你在担心什么?
也就是说,https(http over SSL)是一个很好的起点,这将允许您向设备(或浏览器)验证网站并且无处不在。
如果要对设备进行身份验证,那就有点棘手了。您可以生成并存储一个共享密钥(一个随机数),并在第一次连接到该站点时,在 GET/POST 中提供它......这有很多变化,但简单的都源于建立一个共享密钥和其他任何事情都可能是矫枉过正。这将允许您识别同一设备在下次连接时再次连接。把它想象成设备登录的密码(但它不需要是一个词,而且可能不应该是)。
这样做的困难在于,如果程序被删除,该秘密将丢失,并且取决于您想要做什么,这可能是一个问题,因为下次程序在同一设备上运行时,您需要建立一个新的秘密。在这种情况下,您将无法知道这次连接的设备与之前连接的设备相同。如果您需要,您将需要使用某种重置机制,这很难做到,并且相当于验证用户而不是设备。
请注意,iphone 有一个唯一标识符,但这并不是真正的秘密,并且提供它并不能真正提供任何证明给定设备正在连接的证据。提供它也没有坏处,但它更像是一个断言“我是设备 foo”,而不是身份证明。把它想象成登录的用户名部分——你仍然需要一些共享的秘密。
我找到了一个解决方案:使用“2 legged Oauth”协议。
这样,我坚持标准,我不必重新发明轮子,而且我有一个安全的解决方案。
由于消费者和用户对我来说是相同的,所以当我看到消费者以用户身份登录时,我只是自动授权消费者询问的“请求令牌”!
我正在做的是:
您可能会通过 HTTPS 连接使用共享密钥/单向加密哈希来创建自己的。
然后,如果您想确保它只是一个特定的设备,请在设备上制作设备 id + 时间戳 + 共享密钥的哈希,将其作为参数传递给服务器,并在 PHP 端验证哈希。