gpt4 book ai didi

ruby-on-rails - Web API 服务器应该使用 session ID 和/或授权 token 吗?

转载 作者:行者123 更新时间:2023-12-02 17:47:17 28 4
gpt4 key购买 nike

根据@Veraticus 对此 question 的回答, Web 身份验证框架将当前用户的 ID 保存在 session id 中,以便快速轻松地从数据库中检索用户(无需每次都通过对数据库进行新查询来获取用户)。

这很棒,因为这正是我想通过我正在编写的 API 对我自己的服务器执行的操作(出于性能原因)。

但我想知道 session ID...我的意思是,如果服务器处理 session ,客户端必须向他提供一个 session ID

但是,我还想知道另一件事:一般来说,Web API 使用的是 API key (例如,https://api-docs.heroku.com/)。使用 API key session ID 对客户端来说可能很复杂...

我希望 Heroku 不要在每次 HTTP 请求时使用收到的 auth-token 执行数据库查询。但如果他们不这样做,他们如何才能在没有 session ID 的情况下对用户进行身份验证?

我很困惑。非常感谢您的任何想法。

最佳答案

session 和身份验证 token /API key 是非常不同的身份验证方法,适用于不同的用例。

session 最常用于 HTML 网站,例如,用户向服务器验证一次(通常通过提供用户名和密码)然后浏览网站而无需重新验证他们自己应每个要求。这对服务器有要求,它需要能够维护 session 状态并将其存储在内存中,同时对客户端也有要求,它需要能够存储 session ID(通常在 cookie 中)并在每次出现时显示它。请求。

Auth tokens/API keys 可以被认为是更轻量级的,因为在请求之间没有状态需要维护(服务器是无状态的)。每个操作几乎都是原子的,客户端必须在每次请求时(使用 token / key )对自己进行身份验证。这种方法更适合通过“程序”而不是用户 Web 浏览器以编程方式访问服务器资源。

IMO,客户端同时使用这两者真的没有意义。如果用户已经通过 session 进行身份验证,则服务器已经知道谁在调用它,并且不需要请求额外的 API key 。

OTOH,您的服务器 Web API 应该足够智能,可以接受来自客户端的两种形式的身份验证。当被调用时,它可以检查客户端是否已经建立了一个 session (在这种情况下它知道谁在调用它),如果没有检查客户端是否正在传递一些 API key /授权 token 并即时验证用户。

回答您最后一个问题,由于使用 key 或 token 保护的 API 是无状态的,因此每个调用都需要单独进行身份验证。这意味着它需要为每个请求加载有关客户端的信息以验证 key 。通常此信息存储在数据库中,因此可能意味着每次请求都会命中数据库,除非服务器实现某种缓存来加快处理速度(Heroku 很可能就是这种情况)。

关于ruby-on-rails - Web API 服务器应该使用 session ID 和/或授权 token 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13209437/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com