这个访问令牌是如何存储在客户端的,参见FastAPI的教程“Simple OAuth2 with Password and Bearer”

2024-02-24

总的来说,我对 FastAPI 和 OAuth2 还很陌生。我刚刚完成了教程“带有密码和承载的简单 OAuth2” https://fastapi.tiangolo.com/tutorial/security/simple-oauth2/这基本上是有道理的,但有一步对我来说就像魔法一样……

访问令牌如何存储到客户端并随后传递到客户端的请求中?

我对流程的理解基本上是

  1. 用户使用他们的用户名和密码进行身份验证(这些内容被发布到/token终点)。
  2. 用户的凭据经过验证,并且/token端点返回访问令牌(johndoe) 在一些 JSON 中。 (这是用户接收访问令牌的方式)
  3. ???
  4. 用户向专用端点发出后续请求,例如GET /users/me。用户的请求包含 headerAuthorization: Bearer johndoe。 (我认为文档没有提到这一点,但这是我通过检查 Chrome 开发者工具中的请求收集到的信息)
  5. 然后使用授权令牌来查找在 (4) 中发出请求的用户

步骤(3)是我不明白的部分。访问令牌似乎如何存储在客户端上,然后作为标头传递到下一个请求中?

Demo

当您运行教程中的代码时,您将获得以下 swagger 文档。 (注意授权按钮。)

I click Authorize and enter my credentials. (username: johndoe, password: secret) enter image description here

现在我可以访问/users/me端点。

注意标题如何Authorization: Bearer johndoe自动包含在我的请求中。

最后的注释:

  1. 我检查了我的 cookie、会话存储和本地存储,全部都是空的
  2. 如果刷新页面或打开新选项卡,授权标头就会消失

我怀疑 Swagger 正在暗中做事,但我无法证实。


如果您需要令牌的持久性,您通常会使用 localStorage 或类似的,但在 SwaggerUI 的特定情况下,身份验证信息保存在库内部。

如果您启用了持久性 SwaggerUI将把访问令牌持久保存到 localStorage https://github.com/swagger-api/swagger-ui/blob/cc408812fc927e265da158bf68239530740ab4cc/src/core/plugins/auth/actions.js#L274:

export const persistAuthorizationIfNeeded = () => ( { authSelectors, getConfigs } ) => {
  const configs = getConfigs()
  if (configs.persistAuthorization)
  {
    const authorized = authSelectors.authorized()
    localStorage.setItem("authorized", JSON.stringify(authorized.toJS()))
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个访问令牌是如何存储在客户端的,参见FastAPI的教程“Simple OAuth2 with Password and Bearer” 的相关文章

  • AddressAccessDeniedException :无需 netsh 即可解决它?

    我遇到了异常AddressAccessDeniedException因为我的processus没有注册URL的权限 我首先以管理员身份运行我的程序 好的 它成功了 但我现在想要分发我的应用程序 并且我希望每个用户都能够运行它 而不必成为管理
  • 从 Django 基于类的视图的 form_valid 方法调用特殊(非 HTTP)URL

    如果你这样做的话 有一个 HTML 技巧 a href New SMS Message a 点击新短信打开手机的本机短信应用程序并预 先填写To包含所提供号码的字段 在本例中为 1 408 555 1212 以及body与提供的消息 Hel
  • 如何自定义解析错误的 HTTP 400 响应?

    我编写了一个 REST API 服务 要求所有响应均为 JSON 但是 当 Go HTTP 请求解析器遇到错误时 它会返回 400 作为纯文本响应 而不会调用我的处理程序 例子 gt curl i H Authorization Basic
  • 对于非文本媒体类型,发送带有 Content-Type 标头的字符集参数是否绝对错误?

    我发现了两个软件之间的错误 其中一个正在发出标头 Content Type application x bittorrent charset utf 8 另一个是错误地处理这个问题 但如果删除 charset 参数 则可以正确处理它 我需要
  • Jsoup http 日志记录

    有没有办法记录http请求和响应 我们假设以下请求 Connection Response res Jsoup connect LOGIN URL HERE data user USER pass PASS method Connectio
  • .htaccess 路由到服务器上的子目录?性能/加载时间

    我想知道是否可以使用 htaccess 文件将我的域直接路由到服务器上的子目录 我从常规虚拟主机提供商处购买了虚拟主机软件包 其中我的domain com 连接到我的服务器的根目录 我想知道是否可以以某种方式将 htaccess 文件上传到
  • HTTP 重定向图像可以吗?

    返回图片资源时返回301 302 303代码可以吗 我过去曾这样做过 而且似乎有效 这是好的做法吗 它与大多数浏览器兼容吗 是的 您可以重定向图像 浏览器将遵循重定向 但出于性能原因 您通常希望将重定向保持在最低限度 因为每个重定向都需要单
  • GET 和 POST 方法的单独 Flask 路由

    在 Flask 中定义路由时 最好的做法是使用由多个 HTTP 方法定义的单个路由 并在该单个路由中使用显式逻辑处理不同的 HTTP 方法 例如 app route api users methods GET POST def users
  • 通过 http 的私有 git 存储库

    你能推荐任何简单的解决方案来设置可通过http s cleutus建议的 访问的git存储库吗 我有自己的 http 服务器 我想用它来托管一些小型私人项目 在家里我可以通过 ssh 连接 但在工作中防火墙阻止我这样做 有没有免费的方法来设
  • 如何通过 HTTP POST 发送充满对象的 NSArray?

    我在 iPhone 端有一个产品 购物清单 由具有名称 product id 等的产品对象组成 我希望将此列表发送到服务器 在那里我将服务器上的列表与 iphone 中的列表进行比较 以合并所做的更改并将合并的列表发送回 iphone 如何
  • 在 Heroku 上获取客户端的真实 IP 地址

    在任何 Heroku 堆栈上 我想获取客户端的 IP 我的第一次尝试可能是 request headers REMOTE ADDR 当然 这是行不通的 因为所有请求都是通过代理传递的 所以替代方法是使用 request headers X
  • org.apache.http 软件包在 API 级别 23 中被删除。替代方案是什么?

    在更新到最新的 android API 级别 23 Marshmallow 后 通过 build gradle 添加以下更改后 所有 org apache http 类都不起作用 android compileSdkVersion 23 b
  • 在 Flex 中以 HTTP Post 方式上传任意数据

    我们目前有一个 Java 小程序 可以生成大量数据并将其上传到我们的服务器 我们拥有的上传方法之一是使用 HTTP POST 到我们的服务器 其内容只是原始数据 没有多部分编码或任何内容 我正在考虑实现一个具有相同功能的 Flex 应用程序
  • 具有动态键值哈希映射的 Swagger 复杂响应模型

    我正在努力使用 swagger 的语法来描述响应类型 我想要建模的是具有动态键和值的哈希映射 这是允许本地化所必需的 语言可能有所不同 但应始终提供英语 JSON 格式的响应如下所示 id 1234 name en english text
  • Angular2 中 Http 的 Promise 与 Observable? [复制]

    这个问题在这里已经有答案了 本质上 正如标题所说 是否有任何理由使用可观察的承诺 https stackoverflow com questions 37364973 angular 2 promise vs observable为了进行
  • FastAPI/Pydantic 接受任意 post 请求正文吗?

    我想创建一个 FastAPI 端点 它只接受任意的 post 请求正文并返回它 如果我发送 foo bar 我想得到 foo bar 后退 但我也希望能够发送 foo1 bar1 foo2 bar2 并把它拿回来 我试过 from fast
  • 由于浏览器设置的标头,Safari 拒绝重定向的 CORS 请求

    Summary Safari 拒绝一些涉及重定向的 CORS 请求 声称某些标头是不允许的 但该标头从来不是由脚本请求的 而是由浏览器添加的 所以我认为这应该不重要 Safari 的行为是一个错误吗 规格有问题吗 或者 事情变成这样是有原因
  • 以 RESTful 方式增加资源计数器:PUT 与 POST

    我有一个带有计数器的资源 为了举例 我们将该资源称为profile 计数器是数量views对于该配置文件 Per the 休息维基 http rest blueoxen net cgi bin wiki pl HttpMethods PUT
  • 使用什么 API 在现有 MFC 应用程序中添加 HTTP 客户端支持?

    我最近接到一项任务 要添加与以下内容交互的能力网络地图服务 http en wikipedia org wiki Web Map Service到现有的 MFC 应用程序 我需要客户端 HTTP API 根据我的研究 领先的候选人似乎是CA
  • 网站(Google 和/或您)应如何处理 Accept-Language 标头?

    很长一段时间以来 我对谷歌在以下情况下的行为并不满意 并且在无意中注意到之后80 其他人 https stackoverflow com questions 1011167 what are common ui misconceptions

随机推荐