我目前面临安全服务器通信问题。我是一名移动开发人员,我尝试设计REST(JSON输出)。为了理解这个问题,让我向您展示我的应用程序中的一个流程:
- 首次用户登录应用程序
- 然后可能会下载一些个人信息
- 当用户在应用程序中移动时,我想一直与服务器通信。
所以我认为登录名和密码将通过SSL发送(对吗?错了?这是第一个问题,也许我应该选择OAuth?),但那又如何呢?我收到登录名和密码,将其存储在我的钥匙串中,任何其他服务都应该对所有用户开放吗?我认为这个SSL在第一个请求中只是表面上的安全性,而不是真正的安全性。
让我向您展示到目前为止的休息:
登录:
请求:
https://mywebsiteforrest.com/getin
在那里我输入了标题username=root&password=pass
响应:
{
"status":100, /*This status tell me that everything is OK */
"userKey":"432fdsf732fds7fstsw87frd7s5fd",
"timestamp":1378651048,
"userId: 342
}
以后的要求:
请求:
https://mywebsiteforrest.com/getmydata
在那里我输入了标题userId=342&key=432fdsf732fds7fstsw87frd7s5fd
或者也许我应该这样要求: https://mywebsiteforrest.com/getmydata/342&key=432fdsf732fds7fstsw87frd7s5fd
?
正在寻找建议是安全的还是(就像我之前说的)安全的外观。我知道你讨厌这个问题,但是 - 这样做的正确方法是什么?
我会建议使用标题。
标头是纯加密的。通过网络"明文"的唯一信息与SSL设置和D/H(http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)密钥交换有关。这种交换的设计方式不会向任何第三方或未经授权的人提供任何有用的信息,一旦发生,所有数据都会被加密。