我的应用服务器使用JWT身份验证,我的前端是React(但就此问题而言,可能也是Angular)。
用户首次登录时,应用程序会交换用户提供的用户名+密码,并获取JWT令牌以向应用程序服务器发出内部API请求。
从用户体验的经验来看,我真的希望用户每次去" myapp.com"时都不必输入用户名+密码。但这提出了另一个问题。出于安全考虑,JWT密钥通常是短暂的,必须使用旧的JWT(一段时间)续订,或者在"生命周期后使用新的用户名+密码进行续订。关键目标,不允许更新。
在这种情况下,维持无忧UX的常见做法是什么?让JWT密钥不自然地长寿,只使用cookie保留JWT令牌或实际保留cookie中的用户名+密码?如果是这样的话,我会非常惊讶。
使用用户的IP地址对JWT进行编码是否有意义,并给它无限期的生命?因此,如果其他人(或用户自己)使用不同的位置,他/她将不得不重新输入密码并获得该位置的无限期密钥?
答案 0 :(得分:0)
我们遵循的模式是,我们通常将令牌到期时间设置为用户身份令牌的一天。访问令牌等3-4个小时。
当用户登录时,我们使用他的凭据获取身份令牌并将其存储在localStorage中。然后我们使用我们拥有的身份令牌发出另一个请求来获取webapp的客户端访问令牌,并将客户端访问令牌保存在sessionStorage中。
对于所有后续请求,我们从会话存储中提取它并将其与请求一起发送。
当用户关闭标签(会话)时,访问令牌将丢失,并在下次使用身份令牌再次打开时重新获取。
所以他必须在一天内登录一次。
如果您更关心有人从存储中窃取令牌,您可以使用AES加密和解密令牌。
希望这有帮助。