提问者:小点点

在FastAPI的教程“带有密码和承载的简单OAuth2”中,这个访问令牌是如何存储在客户端上的


总的来说,我对FastAPI和OAuth2很陌生。我刚刚完成了教程“带密码和持有人的简单OAuth2 ”,它基本上是有意义的,但是有一个步骤对我来说感觉像魔术一样..

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

我对流程的理解是

    < li >用户使用其用户名和密码进行身份验证(这些信息会发布到< code>/tokenendpoint)。 < li >验证用户的凭据,并且< code>/tokenendpoint返回某个JSON内的访问令牌(< code>johndoe)。(这是用户接收其访问令牌的方式) <李>??? < li >用户向私有endpoint发出后续请求,如< code>GET /users/me。用户的请求包括标题< code > Authorization:Bearer John doe 。(我想文档中没有提到这一点,但这是我在Chrome开发者工具中查看请求时收集到的信息) < li >然后使用授权令牌查找在(4)中提出请求的用户

步骤(3)是我不明白的部分。访问令牌看起来是如何存储在客户机上,然后作为报头传递给下一个请求的呢?

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

现在我可以访问/users/meendpoint。

请注意标题授权:持有者约翰多是如何自动包含在我的请求中的。

最后备注:

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

我怀疑斯瓦格在幕后做了什么,但我不能说出来。


共1个答案

匿名用户

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

如果您启用了持久性,SwaggerUI将访问令牌持久化到localStorage:

export const persistAuthorizationIfNeeded = () => ( { authSelectors, getConfigs } ) => {
  const configs = getConfigs()
  if (configs.persistAuthorization)
  {
    const authorized = authSelectors.authorized()
    localStorage.setItem("authorized", JSON.stringify(authorized.toJS()))
  }
}