2009-06-30 64 views
4

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

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

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

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

回答

1

我找到了一个解决方案:使用“双腿Oauth”协议。

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

由于消费者和用户对我来说是一样的,我只是简单地授权消费者在看到消费者登录为用户时所要求的“请求令牌”!

我在做什么是:

  • 在SSL:我登录的用户,并要求消费者密钥/秘密服务器
  • 服务器还给我消费键/秘密
  • 在SSL:我登录的用户,并要求“请求令牌”我的消费键/秘密
  • 服务器承认我是用户,以便它自动授权请求令牌
  • 没有SSL:我问一个“访问令牌“我的“请求令牌”
  • 服务器给我的访问令牌回来
  • 我用它来执行请求的安全
0

您可以通过HTTPS连接使用共享密钥/单向加密哈希进行自我推送。

然后如果你想确保它只是一个特定的设备,在设备上做一个设备ID +时间戳+共享密钥的哈希值,将它作为参数传递给服务器,并验证PHP方面。

+0

感谢约翰的回答,我认为这是非常直截了当。但是,解决方案还应该包含一个随机数,以避免有人抓住请求并重播它。 – Martin 2009-07-01 12:08:46

3

您需要说明'secure'是什么意思。确切地说,确保什么?你担心什么?

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

如果您想验证设备,那有点棘手。你可以生成和存储一个共享密钥(一个随机数),当第一次连接到该网站时,在GET/POST中提供该密码......这里有很多变体,但简单的都是建立共享密钥和其他任何事情都可能是矫枉过正。这将允许您识别下次连接时同一设备再次连接。把它想象成设备登录的密码(但是它不需要是一个词,也可能不应该是)。

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

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