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

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

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

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

有帮助吗?

解决方案 2

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

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

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

我正在做的是:

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

其他提示

您将需要澄清你的“安全”的意思。为了防范究竟是什么?什么是你担心什么?

这是说,HTTPS(SSL上的HTTP)是一个很好的起点,这将让你的网站到设备(或浏览器)认证,是无处不在的。

如果您想验证设备,这是比较麻烦一些。您可以生成和存储共享密钥(随机数),并在第一次连接到网站,提供在GET / POST ....有这个许多变化,但简单的人,从建立一个所有干共享秘密和什么都可能是矫枉过正。这将让你认识到,同样的设备再次被它下一次连接时连接。认为它像一个设备密码与登录(但是它并不需要是一个词,可能不应该)。

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

注意,iPhone手机有一个唯一的标识符,但是这不是一个真正的秘密,并提供它并没有真正提供任何证据证明一个给定的设备连接。这是没有坏处提供它为好,但它更像是一个断言“我装置富”,而不是身份证明。认为它像一个登录的用户名部分 - 你仍然需要一些共享的秘密

您很可能推出自己与共享的秘密/单向加密散列通过HTTPS连接。

然后,如果你想确保它只是一个特定的设备,使设备ID +时间戳+设备上的共享密钥的哈希值,它作为一个参数传递到服务器,并验证了PHP的散列侧。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top