将用户标识符放在访问令牌(JWT)的有效负载中是否正确?

Is it right to put the user's identifier in the payload of the access token(JWT)?

我目前正在开发金融服务作为个人项目。

项目中为了加强安全性,设计实现在网关阶段使用AWSAPI网关.

处理认证

我尝试使用 手机 phone 号码 和接收到的 身份验证号码 登录,但我没有我认为这适用于 CognitoIAM 标识符,所以我打算 运行 Node Auth 服务器AWS Lambda.

中发布和验证 JWT 令牌

在此过程中,我尝试在 JWT 的负载中包含一个标识符,例如 user_iduuid token,同事反对

他的意见是access token应该只进行身份验证,token不应该包含用户标识符。

我在某种程度上同意他的看法,但如果是这样,我想知道如何在 API 中传递用户标识符,例如 “评论注册 API”.

我们是否应该在登录成功时将用户标识符和访问令牌一起交给客户端?

总结

  1. 在访问令牌的有效负载中包含用户标识符在逻辑上是不正确的吗?
  2. 如果上述问题的答案是肯定的,那么登录成功时用户标识应该如何传递?

想听听大多数人的意见,所以发了。

谢谢。

是的,这在逻辑上是正确的,也是很正常的事情。要了解如何在 Node Auth Server 中执行此操作,您可以查看以下内容:https://auth0.com/blog/complete-guide-to-nodejs-express-user-authentication/

通常您需要访问令牌中的足够信息,以便您还可以对允许 user/caller 执行的操作进行适当授权。

通常,您将身份验证和授权分开,如下图所示:

因此,要使 API 有效,您确实希望避免必须查找其他信息才能确定您是否被允许访问某些数据。所以,我通常在令牌中包含 UserID 和其他一些 claims/roles,这样我就可以顺利地让用户进入 API.

但是,在访问令牌中添加个人信息可能会遇到一些 GDPR 问题,但有时可能还需要添加。但是我没有看到在令牌中添加 UserId 和角色等信息的任何问题。