在正文或令牌中传递用户 ID

Posted

技术标签:

【中文标题】在正文或令牌中传递用户 ID【英文标题】:Passing user ID in body or in token 【发布时间】:2018-01-26 21:06:21 【问题描述】:

我正在构建一个 REST API。该 API 运行 JWT 身份验证系统。

显然,这意味着安全的路径需要一个有效的 JWT 令牌与授权标头中的请求一起传递。在我拥有的每个 jwt 令牌内:

    sub: 1 //_id

其中 sub 是当前经过身份验证的用户的 ID。

我的问题是,当我传递这个令牌时,是否还需要在请求正文中传递用户 ID?例如,我有一个创建前提方法。这需要帖子正文包含名称和描述,如下所示:

    
        name: "Test Premises",
        description: "Lorem Ipsum"
    

在这种情况下,API 必须通过验证传递的令牌是否有效,然后将其取消编码并检索子字段来找到关联新场所的用户。

这个方法可以吗?

有什么缺点吗?

我也应该在体内传递身份吗?

【问题讨论】:

【参考方案1】:

这个方法可以吗

是的,这就是身份验证令牌的重点。

我也应该在体内传递身份吗?

如果您允许从客户端发送用户 ID(例如如果另一个经过身份验证的用户知道(或欺骗)他们的 ID,则他们可以代表另一个用户创建场所。

【讨论】:

更改用户 ID 会使令牌失效 @user2976358 更改 ID 有什么关系? 我可能误解了你的回答。但是您说如果经过身份验证的用户欺骗了另一个用户 ID,他们可以代表他们创建一个场所。如果用户要编辑他们的令牌以更改 ID,它将使其无效。 @mwild 我指的是这一点“我是否也应该在体内传递 ID ”。如果您使用正文中的 ID 而不是身份验证令牌中的 ID,那么这是可利用的 - 黄金法则,永远不要信任客户端。 啊,这是一个公平的观点。尽管我认为您的原始答案并未完全清楚地表明您正在谈论在体内传递的 id 。无论如何谢谢。

以上是关于在正文或令牌中传递用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何缓存来自 cognito 的 ID 令牌,以便后续访问 API 网关?

在 FCM(Firebase 云消息传递)中,在通知中包含令牌是不是安全?

如何使用谷歌访问令牌获取用户信息

我应该通过 HTTP 标头或将正文作为 JSON 传递到 REST Api 吗?

JWT 令牌作为 API 中用户详细信息的来源?

在 OpenID Connect 中,是不是可以将 id 令牌而不是访问令牌传递给资源服务器进行授权?