我需要为每个用户单独管理 jwt 密钥吗?
Posted
技术标签:
【中文标题】我需要为每个用户单独管理 jwt 密钥吗?【英文标题】:I need to manage jwt secret keys individually for each user? 【发布时间】:2018-02-17 02:47:59 【问题描述】:我使用 jsonwebtoken 模块实现了 jwt 身份验证。但是在生成和验证 jwt 令牌时,我是否需要为每个用户创建和管理任意密钥?为每个用户单独管理密钥与使用一个密钥生成和验证 jwt 令牌之间有区别吗?
【问题讨论】:
【参考方案1】:不,您使用单个密钥来签署您的令牌。这是因为当令牌在请求中返回给您时,您需要能够解码令牌,此时您不知道是否是真正的用户发送您的令牌,因为您还没有验证它.
使用单一密钥来签署和验证您的令牌,并记得妥善保管。
【讨论】:
从技术上讲,没有什么能阻止您在检查签名之前解析 JWT 令牌的标头和/或负载。然而,在这个阶段不能信任令牌。 非常感谢!!罗斯柴尔德,卡西奥·马佐奇·莫林【参考方案2】:为每个用户单独管理密钥与使用一个密钥生成和验证 jwt 令牌之间有区别吗?
简短的回答是否定的,就 JWT 而言,密钥就是密钥。
长答案是视情况而定。 JWT secret 的目的是确保消息的完整性,通常这是您在颁发者(服务器)级别执行的操作,作为验证消息来源的一种方式。通俗地说,如果服务器可以验证签名,那么它就可以信任内容。
用户级别的机密将信任降低了一个级别,因为您不关心哪个服务器生成了消息,而是关心哪个 用户 生成了消息。在典型的身份验证令牌场景中,您确实需要更多的服务器信任。
【讨论】:
【参考方案3】:不,您绝对不需要每个用户都有一个密钥。在大多数情况下,一个密钥对所有用户来说就足够了。
如果您愿意,您可以拥有一组不同的密钥并定期轮换它们以签署令牌。在这种情况下,使用kid
标头声明来保存密钥标识符,然后使用它查找正确的密钥以验证令牌。在answer 中查看更多详细信息。
【讨论】:
非常感谢!!卡西奥·马佐奇·莫林以上是关于我需要为每个用户单独管理 jwt 密钥吗?的主要内容,如果未能解决你的问题,请参考以下文章