通过 JWT 令牌发送存储在数据库中的所有用户详细信息是一种好习惯吗?
Is it a good practice to send all the User details stored in DB via JWT token?
我正在使用 MERN 堆栈 开发一个演示 WebApp,并使用 JWT 进行身份验证。
在后端,当用户请求登录时,我准备了一个 JWT 令牌,方法是在令牌的有效负载中为该用户添加 MongoDB ObjectID 以及必要的时间戳。
在用户登录时,我想在前端存储该会话的用户详细信息。
我知道我可以通过 API 响应共享所有这些详细信息并使用 React Context/Redux 存储它。但是,在登录期间从后端创建一个 JWT 令牌并将所有特定于会话的用户详细信息(除了安全信息)存储到有效负载中并在响应中发送加密令牌是否是一种好习惯?这样,我就可以从 JWT 令牌中解密和解构用户详细信息,并为该会话存储它们。
渴望了解上述过程的优点和缺点,同时考虑最佳编码实践。
您似乎需要来自 OpenID Connect (https://openid.net/) 的 ID 令牌之类的东西。这是一个 JWT,其中包含在前端用于识别用户的用户数据,可能会在某处打印他们的用户名等。使用它是一种常见的做法,但你应该记住,如果你在该令牌中放入太多信息,它将得到相当大(这可能会影响较慢的连接,或需要对其进行解码、验证签名等的较慢的计算机)
另一个可行的选择是拥有一个端点,该端点在需要时 returns 所有信息(请参阅 OIDC 中的 userinfo 端点)。
您还必须记住,有权访问该 JWT 的任何人都可以读取所有这些信息,因此不应在此处保留任何个人信息。
请注意 - I can decrypt & destructure the user details from the JWT token
- 您可能在这里指的是 decode
。解码是将 JWT 从 base64 编码的字符串更改为 JSON 对象的行为。您可以拥有真正加密的 JWT (JWE),以保护它们不被窃听者读取,但您不会在前端应用程序中使用它们。它们的设置和使用也更加复杂 CPU.
我正在使用 MERN 堆栈 开发一个演示 WebApp,并使用 JWT 进行身份验证。
在后端,当用户请求登录时,我准备了一个 JWT 令牌,方法是在令牌的有效负载中为该用户添加 MongoDB ObjectID 以及必要的时间戳。
在用户登录时,我想在前端存储该会话的用户详细信息。 我知道我可以通过 API 响应共享所有这些详细信息并使用 React Context/Redux 存储它。但是,在登录期间从后端创建一个 JWT 令牌并将所有特定于会话的用户详细信息(除了安全信息)存储到有效负载中并在响应中发送加密令牌是否是一种好习惯?这样,我就可以从 JWT 令牌中解密和解构用户详细信息,并为该会话存储它们。
渴望了解上述过程的优点和缺点,同时考虑最佳编码实践。
您似乎需要来自 OpenID Connect (https://openid.net/) 的 ID 令牌之类的东西。这是一个 JWT,其中包含在前端用于识别用户的用户数据,可能会在某处打印他们的用户名等。使用它是一种常见的做法,但你应该记住,如果你在该令牌中放入太多信息,它将得到相当大(这可能会影响较慢的连接,或需要对其进行解码、验证签名等的较慢的计算机)
另一个可行的选择是拥有一个端点,该端点在需要时 returns 所有信息(请参阅 OIDC 中的 userinfo 端点)。
您还必须记住,有权访问该 JWT 的任何人都可以读取所有这些信息,因此不应在此处保留任何个人信息。
请注意 - I can decrypt & destructure the user details from the JWT token
- 您可能在这里指的是 decode
。解码是将 JWT 从 base64 编码的字符串更改为 JSON 对象的行为。您可以拥有真正加密的 JWT (JWE),以保护它们不被窃听者读取,但您不会在前端应用程序中使用它们。它们的设置和使用也更加复杂 CPU.