在基于浏览器的应用程序中,我在哪里存储 OAuth 刷新令牌

Posted

技术标签:

【中文标题】在基于浏览器的应用程序中,我在哪里存储 OAuth 刷新令牌【英文标题】:Where do I store the OAuth refresh token in a browser based application 【发布时间】:2017-01-06 09:01:07 【问题描述】:

我将访问令牌和刷新令牌都存储在本地存储中。这是正确的吗?

详细信息:我有一个 Angular 2 应用程序。用户加载我的应用程序,然后使用我的 api 进行身份验证(用户名、密码)。为它们提供了访问令牌和刷新令牌。客户端使用访问令牌直到过期(15 分钟),然后在遇到 401 错误后,使用刷新令牌(有效期为 6 个月)更新访问令牌。

我的设置与此类似: http://bitoftech.net/2014/07/16/enable-oauth-refresh-tokens-angularjs-app-using-asp-net-web-api-2-owin/

我已经看到类似的问题和建议在服务器上存储刷新令牌,但我不确定在我的情况下我会如何做到这一点(据我所知,客户端需要保留它本地刷新令牌):where to store - access token and refresh token in OAuth 2.0

【问题讨论】:

【参考方案1】:

最好保护刷新和访问令牌免受恶意访问。这可以来自 XSS 脚本、浏览器插件等。

对于传统的 Web 应用程序和浏览器 cookie,使用 HttpOnlySecure 标志可以提供一些保护。 HttpOnly 标志告诉浏览器不允许 JS 访问(仅将 cookie 与请求一起发送到主机)。 Secure 标志告诉浏览器仅在传输安全 (TLS) 的情况下发送 cookie。

刷新令牌应被视为密码或密钥,因为它可用于请求新的访问令牌。 6个月的寿命是一个很大的暴露窗口。我会使用更短的时间跨度并使到期时间滑动。例如,几天或几周,并且每隔一段时间刷新两个令牌。

很遗憾,我还不知道如何保护本地存储。我希望我能在这方面提供更多帮助。 :-(

【讨论】:

以上是关于在基于浏览器的应用程序中,我在哪里存储 OAuth 刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章

Firebase CustomClaims 存储在哪里

使用 OAuth 访问 SPA 和 REST API 时,应该在哪里为 RBAC 存储用户组成员身份

OAuth 2.0 在哪里安全地存储访问令牌以供长期使用

SPA 应该在哪里保存 OAuth 2.0 访问令牌?

我在哪里可以检查 google oauth 2.0 access_token 是不是有效?

Android 类似浏览器的实现,我在哪里缓存图像