如何使用用户凭据为移动应用和后端服务器通信签署HTTP请求?

时间:2013-04-04 10:00:10

标签: php android ios http oauth-2.0

我们有一个非常标准的场景 - 通过HTTP POST和GET与后端PHP服务器API进行移动应用程序通信。用户必须登录移动应用程序才能执行任何操作,因此从移动应用程序到我们服务器的每个请求都需要使用用户凭据进行签名。用户ID和密码在成功登录后保存在移动应用程序内部设置中,因此用户无需再次重新输入。

以前,后端PHP Web服务是由其他人开发的,但现在我们需要自己实现它。查看以前的项目时,他们需要为每个请求传递用户凭据。我在下面发布了几个请求示例。所有数据插入/更新Web服务都使用POST,但是userid和pwd在body中传递其他数据(Save Car)。所有数据选择服务都通过GET参数传递userid及其密码。

这是最好和最安全的方式吗?也许我们应该将sha1(userid + password = salt)放入HTTP授权头并将userid保留在body中(因为我们需要从服务器中的数据库中选择用户传递)?或者我们可以在移动应用中使用OAuth 2来签署HTTP请求(生成userid + pass + ...到授权头)并在后端使用OAuth 2生成相同的哈希并检查它是否相同?我无法找到任何直接的方式如何使用OAuth 2 for PHP仅用于签名请求,所以任何帮助将不胜感激:)此外,有关用于iOS / Android开发的库的相关信息也将受到赞赏。

LOGIN

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

SAVE CAR

HTTP method: POST
URL: http://mybackend.com/saveCar
BODY:

  { "uid" : 123,
    "pwd" : "3CB3E2E6AECA48C41000119767B561F5E9E66229",
    "car" : 
    { "id" : 111,
      "name": "My car"
    }
 }

1 个答案:

答案 0 :(得分:0)

我可能会问用户是否可以在应用中更改密码,然后是否使用应用代码中保存的密码更新该密码?

发布数据的更好方法是创建access_token目录并在其中使用用户ID和密码。  例如: {  的 “的access_token”:{                   “uid”:123,                   “pwd”:“3CB3E2E6AECA48C41000119767B561F5E9E66229”                 } 下,  “saveCar”:{                  “id”:111,                  “名字”:“我的车”              } }

并且在服务器端,通过检查数据库并允许您访问在数据库中执行saveCar,可以轻松地使用此访问权限访问您的所有URL。 否则从服务器端你将有错误消息,因为访问无法登录尝试再次登录。 并在所有请求的post方法中使用它。 对安全类型有好处。 POST方法是PHP数据安全的方法之一。 没有其他你需要的东西。

您可以将访问令牌作为

发布到您的网址,而不是对车辆列表使用GET HTTP请求

{  的 “的access_token”:{                   “uid”:123,                   “pwd”:“3CB3E2E6AECA48C41000119767B561F5E9E66229”,                 } } 到您的Carlist网址。 来自该post方法的 http://mybackend.com/getCars,为此post方法的结果执行代码返回汽车列表。

谢谢,希望这个描述可以帮到你。