【发布时间】:2019-12-21 07:20:57
【问题描述】:
我设想以下使用 JWT 的身份验证方案:
- 客户端使用
{ userName, password }对/loginAPI 端点进行身份验证 - 服务器根据存储的散列凭据验证用户名+密码,并颁发带有一组声明的 JWT 令牌,并使用私钥进行签名
- 然后客户端使用颁发的 JWT 令牌来验证对 API 的任何后续调用,而服务器验证令牌并仅根据提供的令牌中存在的声明应用授权规则(无状态)
签名密钥必须存储在服务器上,它会创建一个非常有价值的攻击向量。
获得私钥访问权限的潜在攻击者可以生成带有任何声明集的 JWT,冒充任何用户,并可能提取他们的所有数据 - 无需知道密码。
如何使用 JWT 进行(无状态)身份验证,同时消除攻击者使用窃取的私钥冒充任何用户而不知道其密码的风险?
【问题讨论】:
标签: security authentication jwt encryption-asymmetric