如何用用户凭证为移动应用程序和后端服务器通信签署HTTP请求


How to sign HTTP requests with user credentials for mobile app and backend server communication?

我们有一个非常标准的场景——一个移动应用程序通过HTTP POST和GET与后端PHP服务器API通信。用户必须登录在移动应用程序,以便做任何事情,所以每一个请求从移动应用程序到我们的服务器需要与用户凭据签署。登录成功后,用户名和密码保存在手机应用内部设置中,无需再次输入。

以前,后端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开发的相关信息也会很感激。

登录

HTTP method: POST
URL: http://mybackend.com/login
BODY:
 { "uid" : 123,
   "pwd" : "3CB3E2E6AECA48C41000119767B561F5E9E66229" // contains sha1(pass+salt)
 }

GET CAR LIST

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"
    }
 }

我可能会问用户是否可以在应用程序中更改密码,那么它是在应用程序代码中用保存的密码更新该密码吗?

发布数据的更好方法是创建一个access_token目录,并在其中使用userid和password。例如:{ " access_token ": {uid: 123;"pwd": "3CB3E2E6AECA48C41000119767B561F5E9E66229"} ,"saveCar": {id: 111;"name": "My car"}}

和在服务器端php代码很容易访问您的所有url与此accesstoken通过检查数据库,并允许您访问做saveCar在数据库中。否则从服务器端,您将收到访问失败的错误消息,请重试登录。在所有请求的post方法中使用它。将有利于安全类型。POST方法是保证PHP数据安全的一种方法。你不需要其他东西了。

您可以将访问令牌POST到您的url,而不是对汽车列表使用GET HTTP请求。

{ " access_token ": {uid: 123;"pwd":"3CB3E2E6AECA48C41000119767B561F5E9E66229",} }到Carlist的URL。http://mybackend.com/getCars?从该post方法中执行如下代码,该post方法的结果返回汽车列表。