【问题标题】:How to make use of session in REST API如何在 REST API 中使用会话
【发布时间】:2021-09-08 04:50:45
【问题描述】:

我在一些公司的 REST Web 服务文档中看到,在步骤 1 中要求 APIkey,他们将返回服务器时间和到期时间以及 auth_key 作为响应。在步骤 2 中登录用户名密码和 apikey 和 auth_key 的 md5 它将返回会话 id 。在剩余的步骤中,用户仅发送会话 ID。怎么可能?按会话?我很困惑,请帮助我解决这个问题

【问题讨论】:

  • 究竟怎么可能?
  • 我是 REST API 的新手,所以我搜索以使用 REST API 中的会话:堆栈溢出中的一些答案我看到了,在 REST API 中使用会话是不可能的,因为我们没有收到来自浏览器的直接请求很难维护会话。但是在本文档中,他们谈到了会话 ID,这就是我感到困惑的原因,它可能与否

标签: php rest


【解决方案1】:

他们实际上并没有使用 PHP session_start() 意义上的 session。他们真正在做什么可以用几个步骤来解释:

  1. 您要求提供 API 密钥:
    1. 该服务随后会生成一个具有生命周期的auth_key
    2. 将生成的api keyauth_keyexpiry 保存到数据库表中。 api key很可能是表上的唯一索引。
    3. 向用户发送包含生成的api keyauth_keyexpiry 键的响应。
  2. 您将登录详细信息与md5(api_key . auth_key) 一起发送:我希望您也可能在标题中发送api key
    1. 首先使用接收到的api key查询数据库表
    2. 检索auth_key 值和到期时间
    3. 检查auth_key 是否未过期;如果没有
    4. 计算md5(api_key . auth_key)
    5. 将其与您请求中的 md5(api_key . auth_key) 进行比较
    6. 如果相同,则会检查您的登录详细信息
    7. 如果登录详细信息正确,则会生成与authenticated account 关联的唯一session_id
    8. 它将这些详细信息保存到另一个数据库表中:session_idaccount_id。我在这里使用帐户 ID,因为它最有可能使用。
    9. 它将session_id 返回给您的客户
  3. 之后您使用session_id 发送的每个请求都会像这样工作:
    1. 它从请求中检索session_id
    2. 它尝试从数据库中检索与session_id 关联的帐户
    3. 如果找到/有效并且您具有执行该操作的访问权限/权限,它将执行该命令。

总之,就是整个流程;这就是为什么我之前说过,当您执行session_start() 时,它不会像会话那样使用会话;这意味着他们不能做类似$_SESSION 的事情。 您还应该知道,尝试使用 session_start 为 RESTful API 进行会话不是 RESTful。

因 Rajan 的评论而更新

这个答案只是基于问题的解释;你不应该想太多。回答你的问题;将 API 密钥和身份验证密钥视为有助于识别用户的流程的 2 个部分:

  • 一个公共:API 密钥
  • 一个私有:身份验证密钥

每次发送请求时,都会发送公钥,以及由公钥和私钥组合生成的字符串。服务器获取公钥,搜索有效的私钥,并尝试使用相同的公式计算值,然后最后将其生成的内容与您生成的内容进行比较。

如果它们相同,则继续处理;如果它们不同,则终止执行。

上面的会话 id 的有效期可以是任何你想要的,通常它会很长(可能持续长达 30 天)。

【讨论】:

  • 既然有帮助,您可以将其标记为答案 ;-)
  • 我第一次问问题所以我不知道,谢谢你的帮助,我标记为答案:)
  • 我不会获取客户端详细信息,例如他们使用的 IP 和浏览器以及他们使用的设备,因为请求是在服务器到服务器之间而不是在浏览器到服务器之间发出的,所以我如何才能获得这些详细信息,它可能没有询问休息服务请求者?
  • 您应该查看 Wurfl 项目 wurfl.sourceforge.net。您可以使用它获取所有信息,因为 Wurfl 通过分析连接客户端发送的“User-Agent”标头来工作。
  • @EmmanuelOkeke auth key 和 api key 有什么区别?它们是用来做什么的? session_id 的预期有效性应该是多少
猜你喜欢
  • 2015-08-26
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
相关资源
最近更新 更多