在基于浏览器的应用程序中,我在哪里存储 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,使用 HttpOnly
和 Secure
标志可以提供一些保护。 HttpOnly
标志告诉浏览器不允许 JS 访问(仅将 cookie 与请求一起发送到主机)。 Secure
标志告诉浏览器仅在传输安全 (TLS) 的情况下发送 cookie。
刷新令牌应被视为密码或密钥,因为它可用于请求新的访问令牌。 6个月的寿命是一个很大的暴露窗口。我会使用更短的时间跨度并使到期时间滑动。例如,几天或几周,并且每隔一段时间刷新两个令牌。
很遗憾,我还不知道如何保护本地存储。我希望我能在这方面提供更多帮助。 :-(
【讨论】:
以上是关于在基于浏览器的应用程序中,我在哪里存储 OAuth 刷新令牌的主要内容,如果未能解决你的问题,请参考以下文章
使用 OAuth 访问 SPA 和 REST API 时,应该在哪里为 RBAC 存储用户组成员身份