带有 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 响应的登录请求的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Angular 中从服务器获取带有 jwt 令牌的响应标头