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

时间:2014-08-25 18:49:07

标签: security authentication oauth token jwt

我的问题很简单 我们是否应该将用户对象存储在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令牌草案规范: http://tools.ietf.org/html/draft-ietf-oauth-json-web-token


1 个答案:

答案 0 :(得分:3)

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

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

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

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