用户对象是不是应该存储在 JSON Web Token 中?

Posted

技术标签:

【中文标题】用户对象是不是应该存储在 JSON Web Token 中?【英文标题】:Should user object be stored in JSON Web Token?用户对象是否应该存储在 JSON Web Token 中? 【发布时间】:2014-10-18 23:46:40 【问题描述】:

我的问题很简单我们应该还是不应该将用户对象存储在 JWT 的有效负载中

例如:

嵌入用户对象:


  iss: "https://YOUR_NAMESPACE",
  user: user, // user object from database
  aud: "YOUR_CLIENT_ID",
  exp: 1372674336,
  iat: 1372638336

或者最好只存储用户的唯一 ID,如下所示:

仅嵌入用户 ID:


  iss: "https://YOUR_NAMESPACE",
  sub: user.id, //only user id
  aud: "YOUR_CLIENT_ID",
  exp: 1372674336,
  iat: 1372638336


JSON Web 令牌草案规范: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token


【问题讨论】:

【参考方案1】:

您可以在令牌中存储有关用户的任何类型的信息,但我认为存储所有用户信息并不有用。

由于 HTTP 是无状态的,因此每次用户连接到您的网站或 Web 应用程序时,都会将令牌发送到服务器以对用户进行身份验证。所以这个token应该尽可能的小(这就是JWT的JSON Compact Serialization格式的目的)。

您应该存储唯一信息来识别用户,例如其电子邮件地址或 ID (aud: "YOUR_CLIENT_ID")。

在需要时,您可以使用 API 调用或任何其他协议向服务器请求有关用户的信息。

【讨论】:

以上是关于用户对象是不是应该存储在 JSON Web Token 中?的主要内容,如果未能解决你的问题,请参考以下文章

JSON数据存储对象唯一和手势冲突

我真的应该使用 NoSQL 吗?

我应该在 web 应用程序的 spring/spring-security 中将用户 ID 密钥存储在哪里?

Android SQLite, JSON, List 用于存储常量对象

我应该以 jwt 还是纯 json 从服务器发送敏感信息?

我应该在哪里存储“非单页”前端应用程序的 JSON Web 令牌