2

我们有一个非常标准的场景——移动应用程序通过 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"
    }
 }
4

1 回答 1

0

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

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

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

您可以将访问令牌发布到您的网址,而不是对汽车列表使用 GET HTTP 请求

{ "access_token":{ "uid" : 123, "pwd" : "3CB3E2E6AECA48C41000119767B561F5E9E66229", } } 到您的 Carlist 网址。 http://mybackend.com/getCars 从那个 post 方法中,执行这个 post 方法的结果的代码返回汽车列表。

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

于 2013-04-25T11:52:10.613 回答