PHP REST API - 验证

时间:2014-03-26 09:14:43

标签: php api rest authentication token

我很遗憾在网站上提出另一个REST身份验证问题,但我真的需要得到一个完整的答案。我有一个REST API,我尝试登录单页网站(通过jquery)。

我想创建一个基于令牌的身份验证,但有一些步骤我仍然无法理解。

首先,我是否必须进行正常身份验证才能获取并在db中存储用户登录名/密码? 我是否必须使用用户会话来存储令牌? 有人有我可以使用的PHP代码的例子吗?

来源:

-----------编辑---------------

好的,我有一些消息需要补充。

  • 首先,是的我必须通过发送对登录来进行正常的身份验证,sha1(登录+密码)
  • 之后,不,永远不会像安全的方式一样使用会话来存储数据,登录和sha1(登录+ passwd)将存储在数据库或应用程序范围存储解决方案中,如haspmap。
  • 但如果你有一段PHP代码,我仍然需要你。这就是我将答案作为编辑的原因。

1 个答案:

答案 0 :(得分:3)

哦,我只看到徽章“长时间没有观点,没有答案”,它把我带回了这里。 我终于找到了答案:

寄存器只能执行一次,因此您可以在没有良好保护的情况下发送哈希密钥。 (我的意思是反对嗅闻)。

所以这是注册的场景:

  • 客户输入登录名和密码
  • 客户端发送登录,哈希(sha256(登录名+密码))
  • 服务器将此对存储在数据库中(您可以将其缓存在hashmap中以提高速度)

现在登录

  • 客户:在html页面中通过休息服务或隐藏字段请求会话盐。
  • 服务器:从datetime生成salt并随机存储并存储在会话中
  • 客户输入登录名和密码
  • 客户端javascript哈希sha256(sha256(登录名+密码)+盐)并将该对(登录,哈希)存储在localstorage中(html5,要小心现代化或其他类似的东西,这对需要保持私密)< / LI>
  • 服务器检查是否(sha256(stored_hash_for_login + salt_in_session)= =哈希收到)
  • 服务器:如果可以存储与客户端共享的令牌
  • 客户登录

现在每次客户端想要发出身份验证请求时,他都会使用以下方法:

  • 从localstorage获取对(登录,令牌)
  • 生成如下请求的哈希:
  • hash_request = sha256(登录+ sha256(令牌+时间戳)+ sha256(令牌+ paramA)+ ...)
  • 参数需要按字母顺序排列。

服务器接收请求(login,timestamp,params,hash_request),检查时间戳是否太旧,并从hashmap中的令牌生成hash_request以进行登录,并检查它是否相同。 这样,您就可以避免重放(时间戳)和清除密码。