基于这篇文章和这个问题,刷新令牌应该是长寿命的,访问令牌应该是短寿命的。我将存储我的刷新令牌超过或等于60天,我的访问令牌20分钟或更多/更少,但永远不会超过一个小时。
我在理解这些令牌的使用时的主要难点是两个令牌的存储方法。我明白,我应该将刷新令牌存储为httponly
,使其无法通过脚本访问(XSS攻击),并将访问令牌存储在本地,localstorage
或sessionstorage
,以便在API调用中作为密钥使用。这样做是正确的方法吗?我是否应该按照本文中的建议进一步加密刷新令牌?任何见解都将不胜感激,感谢阅读。
首先,您需要了解,一旦攻击者掌握了受害者用户代理(浏览器),您绝对无法阻止令牌的提取。没有加密会有帮助。您需要在客户端的某个地方保存加密密钥,这使得加密的整个想法毫无意义。有时人们被迫加密这样的东西,因为他们希望他们的小姐妹无法访问,或者因为大公司有愚蠢的政策,你必须遵守。
我看到您愿意在cookie中保存刷新令牌。没关系,只要确保你把正确的配置放在适当的位置就行了。这个演示应该会有帮助。
最后一句忠告。会话安全不仅仅是关于会话安全。您还需要做TLS、数据消毒和访问控制。如果您忘记了TLS,那么任何令牌存储策略都无济于事。
我已经阅读了JWT和访问令牌和刷新令牌。我知道您必须在很短的时间(分钟)内设置访问令牌过期,并在过期时使用刷新令牌获取新的访问令牌。 我不清楚三件事: 谁检查访问令牌是否过期?客户端是否通过发送过期的访问令牌和刷新来检查并请求新的访问代码? 谁检查刷新令牌是否过期?(显然刷新令牌也需要过期,尽管需要更长的时间才能过期)。 在我看来,如果刷新令牌过期,则必须提示用户重新登录。在某些情况下(移动应用)
这是我的身份验证流程: 用户登录后收到两个令牌(具有过期时间的访问令牌和没有过期时间的刷新令牌) 对于每个用户,刷新令牌存储在数据库中名为refreshTokens的json列中(这是一个数组) 在客户端,访问令牌和刷新令牌都存储在本地存储器上 当需要验证用户时,如果访问令牌过期,将使用刷新令牌创建一个新的访问令牌,并将其发送回用户并保持用户登录 当用户注销时,数据库中存储的刷新令牌(在refre
null 很抱歉太啰嗦了。 提前谢了。
我不熟悉,它代表。我混淆了它的两个术语:访问令牌和刷新令牌。 用户注册/登录站点后,我创建和。 将刷新标记保存在数据库或cookie中。 15分钟后,用户标记访问令牌过期。 如果用户空闲2小时,我将从cookie或DB中删除刷新令牌,否则我将使用刷新令牌续订访问令牌。 有什么优化的方法可以达到这个目的吗?
https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=your_app_client_id&response_type=code&redirect_uri=https%3a%2f%2flogin.microsoftonline.com%2fcommon%2foauth2%2fnativeclient&res