oauth-2.0 - 在授权码授予流程的情况下,OAuth 访问令牌存储在浏览器中的什么位置
问题描述
我输入了我的凭据并登录到受 OAuth 授权代码流保护的 Web 应用程序。然后我执行了以下步骤:
- 打开浏览器开发者工具 (F12) 并开始捕获网络流量
- 尝试从 API 获取数据。此请求将需要发送访问令牌。但是我可以在请求标头中查看该特定请求的网络选项卡上的访问令牌,如下面的屏幕截图所示:
我的理解如下:
- 访问令牌将存储在运行我的 Web 应用程序的 Web 服务器上。那永远不会存储在浏览器中。
- 既然我可以在网络选项卡中看到它,那么访问令牌到底存储在浏览器中的什么位置?我们使用 Azure AD 作为 IDP 和 Owin 包来集成 OAuth 身份验证代码流。
- API 请求通过 HTTPS,我可以在网络选项卡中查看完整的请求详细信息。这是预期的吗?
解决方案
只有这么多地方可以在浏览器中持久存储数据。
在撰写本文时:
- 饼干
- 会话存储
- 本地存储
- 索引数据库
- 网络 SQL
如果您使用库来实现 OAuth2 流程,则可以使用其中任何一个。您可以在 Chrome 中的“应用程序”开发人员工具选项卡下或其他浏览器中的类似位置找到并检查这些存储系统。您可以查看/检查的内容取决于您当前在活动选项卡中所在的域。
如果您的客户端是基于服务器的,因此是机密的,您应该将您的令牌存储在 Secure HttpOnly cookie 中。然后通过您自己的服务器将请求代理到后端,包括来自 cookie 的不记名令牌。这将是最好的地方。
如果您的客户端是单页应用程序,您应该考虑将其存储在“内存中”并在重新加载页面时重新授权。
如果这不是一个选项,那么会话存储是您最安全的选择。如果 OAuth2 由您的前端执行,这最常使用。
在任何情况下,如果 OAuth2 流程仅由前端组件执行,则可以预期令牌位于上述存储系统中的某个位置,并且它包含在开发人员工具的网络选项卡中可见的请求中。
推荐阅读
- docker - 在 Windows 中为 Docker 容器增加 RAM 的 GB
- javascript - 我是否正确测量了 document.getElementById 的速度?
- python - 如何在不使用 detach() 的情况下将 pytorch 张量转换为 numpy 数组?
- nginx - 在两个 Plesk 端口上安装 SSL 证书
- javascript - 如何在javascript中列出2的幂
- machine-learning - Knime 工具组件 Gradient Boosted Trees Predictor 面临错误
- bash - 带有位置参数的shell脚本问题,如果有的话
- ios - Apple 评论 React Native “发生未知错误”
- java - 线程“main”中的异常 java.lang.NullPointerException selenium maven junit
- javascript - 无论如何运行Node JS PATCH请求