我们有一个非常标准的场景——移动应用程序通过 HTTP POST 和 GET 与后端 PHP 服务器 API 通信。用户必须登录移动应用程序才能执行任何操作,因此从移动应用程序到我们服务器的每个请求都需要使用用户凭据进行签名。登录成功后,用户名和密码保存在移动应用内部设置中,用户无需重新输入。
以前,后端的 PHP Web 服务是由其他人开发的,但现在我们需要自己实现。在查看以前的项目时,他们需要为每个请求传递用户凭据。我在下面发布了几个请求示例。所有数据插入/更新 Web 服务都使用 POST,但用户 ID 和密码在正文中与其他数据一起传递(保存汽车)。所有数据选择服务都通过 GET 参数传递用户 ID 及其密码。
这是最好和安全的方式吗?也许我们应该将 sha1(userid+password=salt) 放入 HTTP 授权标头并将 userid 留在正文中(因为我们需要从服务器中的数据库中选择用户密码)?或者,也许我们可以在移动应用程序中使用 OAuth 2 来签署 HTTP 请求(生成 userid+pass+... 到授权标头)并在后端使用 OAuth 2 来生成相同的哈希并检查它是否相同?我找不到任何直接的方法如何将 OAuth 2 用于 PHP 仅用于签名请求,所以任何帮助将不胜感激:) 此外,有关用于 iOS/Android 开发的库的相关信息也将不胜感激。
登录
HTTP method: POST
URL: http://mybackend.com/login
BODY:
{ "uid" : 123,
"pwd" : "3CB3E2E6AECA48C41000119767B561F5E9E66229" // contains sha1(pass+salt)
}
获取汽车清单
HTTP method: GET
URL: http://mybackend.com/getCars?uid=123&pwd=3CB3E2E6AECA48C41000119767B561F5E9E66229
保存汽车
HTTP method: POST
URL: http://mybackend.com/saveCar
BODY:
{ "uid" : 123,
"pwd" : "3CB3E2E6AECA48C41000119767B561F5E9E66229",
"car" :
{ "id" : 111,
"name": "My car"
}
}