Security JWT优于数据库中简单随机生成的令牌?
假设我有一个用于web应用程序的典型CRUDAPI。我需要通过令牌授权用户,检查用户角色等Security JWT优于数据库中简单随机生成的令牌?,security,jwt,token,Security,Jwt,Token,假设我有一个用于web应用程序的典型CRUDAPI。我需要通过令牌授权用户,检查用户角色等 有什么理由让我考虑JWT将一个随机生成的令牌存储在一个表中,比如令牌(令牌、刷新令牌、到期日)/?p> 在我看来,JWT在这里增加了更多的复杂性: 处理编码/解码的附加代码 需要存储JWT机密和密钥 令牌撤销问题 我必须点击数据库来检查用户角色(虽然我可以将它们包括在有效负载中,但我还应该在我的应用程序中检查其他内容),所以这里没有优势。我在这里看到的唯一好处是,我可以检查令牌过期数据,而无需访问数据库
有什么理由让我考虑JWT将一个随机生成的令牌存储在一个表中,比如<代码>令牌(令牌、刷新令牌、到期日)/<代码>?p> 在我看来,JWT在这里增加了更多的复杂性:
我遗漏了什么吗?JWT经常被误解。它们提供的主要好处是无国籍。不管怎样,如果您去数据库查询每个请求的权限,如果不是从理论上而是从实践的角度来看,这几乎是丢失的 它们通常不存储在仅http的Cookie中,这使它们容易受到XSS攻击,但同时允许Javascript客户端读取有效负载(例如,谁登录,他们拥有什么权限等等)。不存储在cookie中也允许将它们发送到不同的来源,这几乎是它们不应存储在仅http cookie中的唯一原因(如果且仅当您理解并接受此风险时) JWT决不会比普通的旧随机会话令牌更好或更安全——在大多数情况下恰恰相反,尤其是与服务器端会话相反,JWT负载是纯文本,这一点常常被忽略。它可以通过消息身份验证防止篡改,但不能防止用户查看,这有时可能会成为一个问题
如果你不需要上面的特性(无状态,从JavaScript访问),你就不应该有JWT的额外复杂性,那么你只需要一个简单的旧会话。
< P>你首先要考虑的是谁将生成令牌。 对于JWT,有效的OAUTH提供程序将生成令牌。好处如下:com.auth0
,特别是jwt
和rsa
,它们可以让您进行解析和验证
您的代码将兼容并易于移植到另一个提供商。JWT和OAuth之间几乎没有任何关系,只是OAuth碰巧使用JWTs作为令牌格式。在大多数语言中,实现令牌验证是不必要的,因为已经有了解决方案,但很容易出错。此外,您还错过了在进行此类验证时检查hmac这一最重要的事情。