我有一个Web应用程序,用户使用后端Spring MVC服务器登录。我使用JWT实现它,它可以正常工作(
)localstorage
我的问题是如何通过仅使用JWT让服务器知道谁在调用端点?
是否可以在没有签名密钥的情况下获取有效负载中的用户名字段?我之所以需要知道哪个用户触发了它,是因为我必须检索正确的密钥以验证JWT,这取决于用户。
我的想法是为每个请求发送JWT和用户名。这是正确的做法还是不需要,我错过了这个JWT的东西?
答案 0 :(得分:1)
JWT规范系列允许您拥有以下标记(Learn JSON Web Tokens):
您似乎使用了签名的令牌,然后使用base64url编码进行编码,以便更容易通过HTTP进行传输。使用此方法,您可以在实际需要验证签名之前访问其中包含的数据。有关示例,请参阅jwt.io,您将能够在不实际执行签名验证的情况下查看示例令牌(标头和有效负载)的内容。
基于此,您可以在令牌中包含一些内容,以便您了解用于验证签名的签名密钥。 kid
standard claim在包含该信息的位置方面似乎是一个很好的候选者。
"孩子" (密钥ID)标头参数是一个提示,指示使用哪个密钥来保护JWS。
此外,还有一些关于您的实施的说明;鉴于用户提供的密码通常具有很少的熵(随机性),您不应该存储密码的直接哈希。相反,您应该使用一个合适的库,在散列之前对密码加密,并且还使用专门针对密码散列的算法 - 类似于bcrypt。
作为补充说明,使用刚签名和编码的JWT是最普遍的方法,也是一般推荐的方法。如果需要在令牌本身中包含敏感信息,您只需要考虑使用JWT加密,这会增加显着的复杂性。