对JWT授权的特定策略有何看法?

时间:2020-07-05 21:26:21

标签: javascript node.js jwt

我决定将JWT实施为我正在构建的Web应用程序的授权方法。我之所以选择这种方法,是因为我不想在每个请求中都查询数据库,并且因为水平扩展更容易(我不需要在负载均衡器上使用粘性会话)。

这种方法的缺点是我必须在accessTokens上设置到期日期/时间,否则用户将永远可以访问我的webapp。解决方案是使用refreshTokens。

但是,这又是一个缺点,我现在必须在数据库中维护这些令牌,以便在用户更改密码时或帐户被盗用时可以撤消这些令牌。

我想知道是否有更好的方法?


所以我想出了这个策略,如果我忽略了一些东西,我想请您发表看法:

1。)首先,让我说数据库中的所有用户对象都维护一个名为“ passwordLastChanged”的属性

2。)成功登录后,我将为accessToken提供一个有效期为+4小时的有效期。访问令牌还将提供一个附加字段“ absoluteExpire”,该字段将设置为将来的7天(详情请参见下文)

3。)在4小时结束时,当用户访问需要授权的页面时,系统将首先检查数据库,特别是passwordLastChanged属性。

如果passwordLastChanged在accessToken的4小时到期之前但在其创建日期/时间之后,则迫使用户重新登录,重置整个令牌过程(换句话说,返回步骤2)。

如果已达到“ absoluteExpire”,则还将迫使用户重新登录。

否则,将再次刷新accessToken 4小时,并保留“ absoluteExpire”属性。

我可以忽略任何明显的东西吗?这是个好策略吗?

1 个答案:

答案 0 :(得分:2)

我是一名前端开发人员,我发现如果您只需要通过电子邮件/密码,谷歌,推特等进行身份验证,那么Google Firebase是您的不二之选。设置和创建用户非常简单,就像:

import firebase from 'firebase/app'
import 'firebase/auth'

const createUser = (email, pwd) => {
  firebase.auth().createUserWithEmailAndPassword(email, pwd)
    .then(user => console.log(user))
    .catch(e => console.log(e)) 
}