我是 OAuth 2.0 的新手,我想知道在通用电子商务网站中存储访问令牌和刷新令牌的最佳实践/位置是什么。
问题1:
访问令牌和刷新令牌应存储在网站中的何处? (cookie、网络存储或本地存储)。像google、dropbox这样的大公司在哪里存储访问令牌和刷新令牌?
问题2:
如果刷新令牌存储在客户端(以台式机/笔记本电脑中的浏览器为例),是否有人在该设备上拥有物理增益,能够获取刷新令牌和设备信息并使用它在其他地方生成访问令牌?
问题3:
我看到一些帖子建议客户端永远不应该存储和了解刷新令牌。那么,这种情况下刷新令牌应该存储在哪里以及如何重新验证呢?
由于您没有提到您的(OAuth2)客户端是哪种类型,所以有点难以回答。一个好的做法是遵循 IETF 最佳当前实践,这些实践已记录在 RFC(草案)中:
基于浏览器的应用程序: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-browser-based-apps
本机应用程序: https://datatracker.ietf.org/doc/html/rfc8252
其中深入描述了许多方面,例如 cookie 策略等。您还可以尝试为您的软件库寻找 OAuth2 库,以帮助您进行客户端令牌管理。这将是我解决问题的第一个方法。
A1:访问令牌的生存时间比刷新令牌短得多,您可以将刷新令牌存储在本地存储甚至服务器端的其他安全存储中;对于访问令牌,网络存储和本地存储都可以;将访问令牌存储在 cookie 中没有多大意义
A2:是的,因此刷新令牌不应存储在客户端;
A3:存储在服务器/服务端
A1 - 您必须将刷新令牌存储在http-cookie(js 无法访问)和数据库中,并使用数据库验证 cookie 刷新令牌。将访问令牌存储在内存或会话存储中,但它必须在短时间内过期
回答 1,回答问题 1 和 3