PHP REST API - 认证

3
我很抱歉要在网站上再发一个REST身份验证问题,但我真的需要得到一个完整的答案。 我有一个REST API,在其中我尝试通过jquery登录单个页面网站。
我想创建基于令牌的身份验证,但有一些步骤我仍然无法理解。
首先,我是否需要进行普通身份验证以获取并存储用户登录/密码? 我是否必须使用用户会话来存储令牌? 有人有我可以使用的PHP代码示例吗?
来源:
- PHP rest API身份验证 - 不使用OAuth身份验证设计安全的REST API
----------- 编辑 ---------------
好的,我有一些要补充的新闻。
首先,是的,我必须通过发送登录名和sha1(login + passwd)对进行正常认证。
之后,不,永远不要将会话用作安全存储数据的方式,登录名和sha1(login + passwd)将存储在数据库或应用程序作用域存储解决方案中,例如哈希映射。
但如果您有一段PHP代码,我仍然需要您的帮助。这就是我将我的答案作为编辑的原因。
1个回答

4

哦,我刚看到了“长时间无查看和无回答”的徽章,这让我回到了这里。 我终于找到了答案:

注册是一次性的,因此您可以发送哈希密钥而不需要真正好的保护。(我的意思是防止窃听)

因此,以下是注册情况:

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

现在进行登录

  • 客户端:通过rest服务或html页面的隐藏字段请求会话盐。
  • 服务器:从日期时间和随机数生成盐并存储在会话中
  • 客户端输入登录名和密码
  • 客户端JavaScript哈希 sha256(sha256(login + password) + salt) 并将该对(登录名,哈希)存储在本地存储(html5,请注意现代化程序或其他类似内容,此对需要保持私密)
  • 服务器检查是否符合条件(sha256(stored_hash_for_login + salt_in_session) == hash received)
  • 如果确定无误,则服务器存储与客户端共享的令牌
  • 客户端已登录

现在,每当客户端想要进行身份验证请求时,他将使用以下方法:

  • 从本地存储获取登录名和令牌的对
  • 生成请求的哈希如下:
  • hash_request = sha256(login + sha256(token + timestamp) + sha256(token + paramA) + ...)
  • 参数需要按字母顺序排列。

服务器接收请求(login, timestamp, params, hash_request),检查时间戳是否太旧,从Hashmap中为登录提取哈希请求并检查是否相同。 通过这种方式,您可以避免重播(时间戳)和明文密码。


谢谢你的回答。 - undefined
太棒了!谢谢你! - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接