假设我在.core. 我将我的生命设定access token为大约 30 分钟。哪一个对我来说并不重要UI,也许是一些angular.js/vue.js甚至是网络枪口WPF。
为了更新access token,我用了所谓的refresh token,技术并不新鲜。
当我登录时,我得到了几个令牌 -access token和refresh token. Refresh token,可以这么说,只属于一个单一access token的,每次我请求一个新的访问令牌时,通过提供access token,我“杀死”它 - 我标记它revoked。
有几个问题:
与我合作的最佳方式是什么
refresh token?我提出了一个问题:当我向服务提出请求并且它来找我时,401我提出了一个新的请求access token/refresh token。同时,在客户端我有一个监视器access token(1 用于写作,很多用于阅读)。这是正确的方法吗?更新时
access token,我可以抛出两个错误-RefreshTokenAlreadyRevoked(refresh token已使用)或RefreshTokenNotFound(refresh token未找到)。当这些错误出现在客户端时(当请求一个新的配对时),我只是在登录屏幕上“敲掉”用户。这是正确的?它应该存储
refresh token在数据库中吗?也许我重新启动了服务?!但如果我的access token生命不超过 10 分钟,并且系统中有超过 1000 个用户,并且每个用户请求一对新的,并且每天access大约refresh token10 次,那么每天都会堆积垃圾。但是,再次回到第 2 点,我有一个错误——RefreshTokenAlreadyRevoked也就是说,我仍然需要存储一段时间?!
只能通过主令牌访问应用程序。
Refreshtoken通常打算在主令牌的生命周期到期后刷新主令牌,以免在应用程序中存储密码,也不会每次都调用登录表单。因此,如果主令牌不再有效,则将其发送到服务器refreshtoken(如果存在)并使用它更新主令牌。因此,
refreshtoken令牌的生命周期应该足够长,而主令牌相反,应该足够短。或者,您可以将refreshtoken其创建日期保存在数据库表中,并在生命周期结束后清理不必要的令牌。如果
refreshtoken丢失或已过期,则通过登录表单重新授权。