用户对象是不是应该存储在 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 中?的主要内容,如果未能解决你的问题,请参考以下文章
我应该在 web 应用程序的 spring/spring-security 中将用户 ID 密钥存储在哪里?