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

标签 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 token 草案规范: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token


最佳答案

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

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

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

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

关于security - 用户对象应该存储在 JSON Web Token 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25492469/

相关文章:

apache - 如何限制对我无法仅通过其他引用应用程序控制的应用程序的访问?

authentication - Windows Azure ACS 和/或 Active Directory (WAAD)

php - 如何从 Android 应用程序 PHP Web 服务器发布 GoogleAuthUtil.getToken() 的 token

c# - ASP.NET MVC - GET 请求上的 CSRF

java - Spring Boot 路径变量旁边的精确逗号

security - 我可以在不使用 --privileged 标志的情况下运行 Docker-in-Docker

php - 允许第 3 方身份验证的 CodeIgniter 身份验证系统?

c# - 无法从传输连接读取数据 : the connection was closed

android - 如何在我的网络应用程序中使用来自 AccountManager 的 Google token ? (Rails with omniauth-google-oauth2)

php - 无法使用 PHP OAuth 扩展使用已知的 CA 证书对对等证书进行身份验证