【发布时间】:2018-12-27 09:18:58
【问题描述】:
基本上,我使用 JWT 身份验证,在成功登录后,我将返回 JWT 令牌、到期时间和用户的 GUID(我应该吗?)
让我们举个例子:
我有一个端点,它返回需要经过身份验证的用户特定数据
那么,我该怎么做呢?
让我们这么说
user1 生成了他的 jwt:“a.b.c”
user2 生成了他的 jwt:“c.b.a”
如何确保 user1 不会使用他的 JWT 访问 user 2 的数据?
我考虑过(正如我之前提到的)使用 JWT 令牌发送用户的 GUID 并将其用作识别该用户的一种方式,但如果有人有其他人的 GUID,那么他将能够操纵他的数据,这不是不错。
提前致谢。
【问题讨论】:
-
这就是 JWT 的本质。如果有人设法劫持了您的 JWT,那么他们基本上可以假装是您。您可以采取一些措施来帮助消除这种情况,例如使用安全连接以使其不被拦截,并且不使用寿命很长的 JWT
-
How can I ensure that user1 will not use his JWT to access user's 2 data?jwt 有效负载通常具有sub声明,这是令牌颁发给谁的标识符。将userid存储在其中,然后检查两者。那么 jwt token owner 只能访问自己匹配的 userid 数据。 -
如果 user1 可以使用 JWT,他也可以伪装成 user1,因此通常您的客户端和服务器之间的通信必须加密,以便数据只能由预期用户读取,因此在这种情况下,不应将 user2 的 JWT 发送给 user1,并且在发送令牌时,必须对通信通道进行加密这是一篇关于 oauth2.0 工作流程的好文章requests-oauthlib.readthedocs.io/en/latest/oauth2_workflow.html
-
要添加到 Mardoxx 点,如果令牌已签名,您可以读取令牌的内容,但没有私钥您无法更改它 - 签名可防止篡改。
标签: c# asp.net-core jwt backend asp.net-core-webapi