以下是我的认证流程:
- 用户登录后会收到两个令牌(access token具有过期时间,refresh token无过期时间)
- 对于每个用户,refresh token都将存储在数据库中的JSON列refreshTokens中(该列为数组)。
- 在客户端上,access token和refresh token都存储在本地存储中。
- 当需要验证用户时,如果access token已过期,则使用refresh token创建一个新的access token,并将其发送回用户,使用户继续保持登录状态。
- 当用户退出时,从数据库中删除存储在refreshTokens列表中的refresh token。
我的问题如下:
- 这个流程是否安全?
- 我需要将refresh token保存在cookie中,还是只用本地存储就足够了?
1. 这个流程看起来是相对安全的,因为它使用了access token和refresh token的组合,加上过期时间和数据库中的存储方式可以帮助减少攻击风险。但要确保刷新token时进行必要的身份验证,并限制refresh token的范围以保护用户账户。
2. 将refresh token保存在cookie中或本地存储中都可以,但是请注意,将敏感信息保存在cookie中可能会被跨站点请求伪造(CSRF)攻击利用,因此请确保采取必要的安全措施来保护cookie。