gpt4 book ai didi

api - 传统 Web 应用程序和 API 中的身份验证、授权和 session 管理

转载 作者:行者123 更新时间:2023-12-03 05:21:20 26 4
gpt4 key购买 nike

如果我错了,请纠正我:在传统的Web应用程序中,浏览器会自动将 session 信息附加到对服务器的请求中,以便服务器可以知道该请求来自谁。实际上到底附加了什么?

但是,在基于 API 的应用程序中,此信息不会自动发送,因此在开发 API 时,我必须检查自己,例如请求是否来自经过身份验证的用户?这通常是如何完成的?

最佳答案

HTTP 协议(protocol)在设计上是无状态的,每个请求都是单独完成的,并在单独的上下文中执行。

session 管理背后的想法是将来自同一客户端的请求放在同一上下文中。这是通过服务器发出一个标识符并将其发送给客户端来完成的,然后客户端将保存该标识符并在后续请求中重新发送它,以便服务器可以识别它。

Cookie

在典型的浏览器-服务器情况下;浏览器为每个域管理一个键/值对列表,称为 cookie:

  • 服务器可以使用 Set-Cookie HTTP 响应 header 来管理 Cookie(创建/修改/删除)。
  • 服务器可以通过解析 Cookie HTTP 请求 header 来访问(读取)Cookie。

面向Web的编程语言/框架提供了更高级别处理cookie的功能,例如PHP提供了setcookie/$_COOKIE写入/读取cookie。

session

回到 session ,在典型的浏览器服务器案例中(再次),服务器端 session 管理利用客户端 cookie 管理。 PHP's session management设置 session ID Cookie 并使用它来识别后续请求。

Web 应用程序 API?

现在回到你的问题;由于您负责设计 API 并记录它,因此实现将由您决定。你基本上必须

  1. 通过响应正文(XML/JSON 身份验证响应)内的 Set-Cookie HTTP 响应 header 为客户端提供标识符。
  2. 拥有维护标识符/客户端关联的机制。例如,将标识符 00112233445566778899aabbccddeeff 与客户端/用户 #1337 相关联的数据库表。
  3. 让客户端在所有后续请求中重新发送在 (1.) 处发送给它的标识符,无论是在 HTTP Cookie 请求 header 中,还是 ?sid=00112233445566778899aabbccddeeff参数(*)。
  4. 使用 (2.) 中的机制查找收到的标识符,检查是否进行了有效的身份验证,并被授权执行请求的操作,然后代表经过身份验证的用户继续执行该操作。

当然,您可以在现有基础架构上构建,您可以在应用程序中使用 PHP 的 session 管理(这将处理 1./2. 和 4. 的身份验证部分),并要求客户端实现执行 cookie管理(这将处理 3.),然后您在此基础上执行其余的应用程序逻辑。

<小时/>

(*) 每种方法都有优点和缺点,例如,使用 GET 请求参数更容易实现,但可能会产生安全隐患,因为 GET 请求会被记录。您应该对关键(所有?)应用程序使用 https。

关于api - 传统 Web 应用程序和 API 中的身份验证、授权和 session 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10960131/

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