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