在授权代码授予流程中,OAuth 访问令牌存储在浏览器中的何处

vrc*_*cks 4 oauth-2.0 azure-active-directory

我输入了凭据并登录到受 OAuth 授权代码流保护的 Web 应用程序。然后我执行了以下步骤:

  1. 打开浏览器开发者工具(F12)并开始捕获网络流量
  2. 尝试从 API 获取数据。此请求将需要发送访问令牌。但我可以在请求标头中查看该特定请求的网络选项卡上的访问令牌,如下面的屏幕截图所示:

在此输入图像描述

我的理解如下:

  1. 访问令牌将存储在运行我的 Web 应用程序的 Web 服务器上。那永远不会存储在浏览器中。
  2. 既然我可以在网络选项卡中看到它,那么访问令牌到底存储在浏览器中的哪里?我们使用 Azure AD 作为 IDP 和 Owin 包来集成 OAuth 身份验证代码流。
  3. API 请求通过 HTTPS 进行,我可以在网络选项卡中查看完整的请求详细信息。这是预期的吗?

sg3*_*g3s 5

浏览器中可以持久存储数据的位置有限。

截至撰写本文时:

  • 饼干
  • 会话存储
  • 本地存储
  • 索引数据库
  • 网络SQL

如果您使用库来实现 OAuth2 流程,则可以使用其中任何一个。您可以在 Chrome 中的“应用程序”开发人员工具选项卡下或其他浏览器中的类似位置找到并检查这些存储系统。您可以看到/检查的内容取决于您当前在活动选项卡中所在的域。

  1. 如果您的客户端是基于服务器的,因此是保密的,您应该将您的令牌存储在 Secure HttpOnly cookie 中。然后通过自己的服务器将请求代理到后端,包括来自cookie的不记名令牌。这将是最好的地方。

  2. 如果您的客户端是单页面应用程序,您应该考虑将其存储在“内存中”,并在重新加载页面时重新授权。

  3. 如果这不是一个选择,那么会话存储是您最安全的选择。如果您的前端执行 OAuth2,则最常使用此方法。

在任何情况下,如果 OAuth2 流仅由前端组件执行,则预计令牌驻留在所提到的存储系统中的某个位置,并且它包含在开发人员工具的网络选项卡中可见的请求中。