我之前曾就JWT令牌的安全问题提出了一个很长的问题,但我想在这里专注于JWT令牌撤销。我使用JWT作为我的主要身份验证机制来验证移动应用程序的移动客户端。我的问题是:是否值得实施令牌撤销?目前,我的代币使用寿命很短,我依靠TLS来防止未经授权的用户窃取令牌。我还没有实现令牌撤销。但基本上这意味着如果一个令牌以某种方式被盗,就没有办法撤销它。更让我担心的是,当用户退出应用程序时,如果我无法撤消它,那么他们使用的最后一个令牌仍然有效。而且这也意味着我不能限制用户可以请求的令牌数量,因为我没有跟踪发布的任何令牌。我已经看到许多应用程序只将所有已发布的令牌存储在数据库中,允许它们撤销和管理令牌。但这似乎打败了使用JWT的目的。值得添加这种复杂性还是我当前的系统安全?
提前致谢。我感谢任何帮助。
答案 0 :(得分:3)
我认为您应该考虑某人可以提取令牌的可能性,无论您如何获得令牌。它存在于您无法控制的设备上。
为什么不与客户端和服务器协商密钥,而不是传递令牌?他们可以使用该密钥向您的服务器签署他们的请求,您可以跟踪这些秘密 - 如果有人注销,甚至可以撤销它们。这使您可以保持签名的过期时间很短,因此即使它们被捕获,它们也只能在几分钟内完成。
答案 1 :(得分:3)
这是否值得,这里的任何人都很难评估。这取决于您所保护的内容以及您试图减轻的风险。
如果您认为有必要撤销令牌,则可以使用reference tokens。它会强制使用这些令牌的服务与授权服务器通信,从而降低可扩展性并引入单点故障。
正在制定一些措施来防止令牌盗窃。请查看Token Binding Protocol和Proof Key for Code Exchange by OAuth Public Clients。