带有 JWT 响应的登录请求

Posted

技术标签:

【中文标题】带有 JWT 响应的登录请求【英文标题】:Login request with JWT response 【发布时间】:2019-10-16 22:50:50 【问题描述】:

我有一个请求“/login”,它基本上验证了 USERNAME 和 PASSWORD,并在成功后返回令牌 (JWT)。

现在的问题是我的 API 也返回 USERNAME 和 PASSWORD 以响应令牌。这是正确的方法还是应该从响应中删除 USERNAME 和 PASSWORD。

请求 JSON


"USERNAME": "admin",
"PASSWORD": "123456"

回应


    "token": "eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE1NTk1NTM4NjcsInVzZXJMb2dpbklkIjoiYWRtaW4ifQ.fxaENKTXxPG5wl8hp7_cSORfMzI38ODu_HgNRj3c7UZwohiFNFfZVpou8MYU4kkxEXV87-LP3upctjGCpGV6_Q",
    "PASSWORD": "123456",
    "USERNAME": "admin"

【问题讨论】:

是的,您应该仅将用户数据用于获取令牌 嗨@Lalit Dashora,你能更新一下你是如何修复它或接受和回答的吗? 嗨@Brother,我没有从社区得到确切的答案,但现在,我已经从回复中删除了用户名和密码。目前,同意你的回答。 【参考方案1】:

正如其他人在这里所说,您的应用程序不应该知道密码或将其保存为任何状态(内存、数据库...),而是对其进行哈希处理。

【讨论】:

【参考方案2】:

我无法对兄弟的回答添加评论,所以我将在这里分享我的想法。

正如Brother所说,您不应该暴露密码或任何不需要的敏感信息。如果你想知道令牌引用的是哪个用户,你可以在里面放一个 UUID,它是你的用户的非线性字符串标识符。许多数据库将这种类型的标识符作为主键处理。 您还应该使用 bcrypt 等库对密码进行加密。

【讨论】:

【参考方案3】:

出于安全原因,您绝对应该从响应中删除密码。我不明白你为什么要在那里。 即使是用户名,如果您需要任何信息,它也应该在令牌本身内。

另一个好办法是,一起拥有一个refreshToken,这样在token过期的情况下,你可以使用refreshToken来获取一个新的,而不需要用户重新登录。

另外,避免在 JWT 中包含敏感信息,如电子邮件、密码、全名等...

任何人都可以获取它并在页面中发布:https://jwt.io/ 以检索里面的内容。

【讨论】:

以上是关于带有 JWT 响应的登录请求的主要内容,如果未能解决你的问题,请参考以下文章

JWT 授权重定向到登录

如何在 Angular 中从服务器获取带有 jwt 令牌的响应标头

CORS 错误和带有 JWT 令牌的 403 响应

无法使用赛普拉斯发送 POST 登录请求

通过 CORS 的 GraphQL 请求的无效响应和通过使用 JWT 的 GraphiQL 处理身份验证的有效响应

jwt/tymon 到期时间不起作用