我花了很多时间在这上面,这是我第一次使用智威汤逊,真的需要你的一些想法。
现在,我将令牌存储在单独的 httpOnly cookie 中(我的访问令牌在 15 分钟后过期,并在 7 天后刷新令牌)。
我读过,存储令牌的最安全方法实际上是使用 cookie 作为刷新令牌,使用内存中(如变量)作为访问令牌。
虽然我知道这是安全的,但我并不真正了解它在实践中如何运作。这是否意味着我们必须在每个请求上使用刷新令牌创建一个新的访问令牌?或者有没有办法让它有效并复制到新变量直到过期?
顺便说一句,我正在使用 React 和 Node。
我也花了几天时间阅读这个内容。 根据我收集的信息,解决方案如下:
用户使用登录名和密码登录。
服务器生成一个长期存在的刷新令牌,并存储为 HttpOnly Cookie,防止 XSS 攻击,因为它无法通过 Javascript 访问。
生成一个访问令牌,可以存储在 localStorage 中或内存中(在变量中)。访问令牌的有效期很短,只有几分钟。
当访问令牌不再有效时,因为它已过期,或者因为它已被擦除,API 调用将被拒绝。拦截此调用,然后调用 API 刷新路由以使用刷新令牌生成新的访问令牌。
要注销,请删除 cookie(最终列入黑名单)并擦除上下文/本地存储。
使用 axios,
axios.defaults.withCredentials = true;
确保 cookie 与请求一起发送,并且 { headers: { 'Authorization': `Bearer ${access_token}` } }
确保访问“承载”令牌与请求一起发送。这些可以设置为每个请求或每个请求的默认值,因此这两种语法。