我即将实现使用JSON Web令牌(JWT)方法的身份验证系统。我在网上阅读了多种方法,但它们似乎总是与我想要使用的方法略有不同。
我想到的方法是:
用户登录,导致服务器创建刷新令牌和访问令牌。 (刷新令牌包含一个id和一个到期日期,访问令牌是一个有效期为15分钟且包含刷新令牌ID的JWT)
用户可以使用访问令牌发出多个成功请求,直到它过期
一旦用户使用过期令牌执行请求,服务器将检查过期访问令牌中包含的刷新令牌ID是否与当前刷新令牌匹配
如果匹配,请更改刷新令牌ID并创建包含新刷新令牌ID的新访问令牌
如果不匹配,请询问身份验证
我认为这种方法具有以下优点:
它并不要求客户直接处理刷新令牌
数据库或缓存请求每15分钟只需执行一次,以检查刷新令牌
它允许应用程序通过从数据库或缓存中删除刷新令牌来终止会话。
服务器将只创建一个与刷新令牌匹配的访问令牌。续订访问令牌后,再次使用它不会导致其他刷新操作
有人可以对此发表评论吗?这是一个好方法吗?
答案 0 :(得分:1)
刷新令牌的目的是允许应用程序获取新的访问令牌,而无需重新进行身份验证,从而最大限度地减少被盗令牌的影响。如果您允许在令牌本身中自动续订(包括刷新ID),则实际上延长了令牌的生命周期而无需刻意要求刷新令牌
窃取JWT的攻击者可以无限期地冒充用户,直到用户执行新访问且ID不匹配为止。
我认为在使用特定刷新令牌
之前获取新访问令牌更安全