【发布时间】:2017-08-15 12:50:53
【问题描述】:
在我的 nodejs 应用程序中,我使用 jwt 令牌进行身份验证。现在,在创建令牌之后,将对其进行验证。为此,它应该存储在某个地方以进行验证。所以,我的问题是,我应该将它存储在针对相关用户 ID 的单独数据库模式中,还是应该将它存储在其他地方?
【问题讨论】:
在我的 nodejs 应用程序中,我使用 jwt 令牌进行身份验证。现在,在创建令牌之后,将对其进行验证。为此,它应该存储在某个地方以进行验证。所以,我的问题是,我应该将它存储在针对相关用户 ID 的单独数据库模式中,还是应该将它存储在其他地方?
【问题讨论】:
JWT 不需要存储在服务器端。创建 JWT 时,您使用秘密对其进行加密 - 将其视为“密码”。然后你把它发送给客户端,在那里可以存储它。
当客户端发出请求时,它会同时发送 JWT。在服务器端,您可以使用相同的秘密对其进行解密。如果密钥不起作用,您就知道它是无效的 JWT。
出于显而易见的原因,您的 JWT 机密应该保密!最好的方法是将其存储为环境变量。
【讨论】:
无需在服务器端存储 JWT。这就是 JWT 在服务器端启用“异步”令牌验证的重点。
以下是涉及的一系列步骤,以简化的方式表示:
1- 服务器使用一个秘密创建一个 JWT(在多个服务器节点之间维护这个秘密很重要,因为客户端可以使用给定的 JWT 连接到其中的任何一个服务器)
2- 客户端存储此 JWT 并在随后对服务器的请求中提供它
3- 服务器(或场中的任何给定服务器节点)根据之前用于加密/创建 JWT 的密钥验证传入的 JWT
HTH
【讨论】: