jwt签名:RS256或HS256

jwt签名:RS256或HS256,jwt,digital-signature,signature,Jwt,Digital Signature,Signature,在Auth0中,jwt令牌签名有两种算法:RS256和HS256 RS256是一种非对称算法,这意味着有两个密钥:一个公共密钥和一个私有密钥(秘密)。Auth0拥有用于生成签名的密钥,JWT的使用者拥有用于验证签名的公钥 HS256是一种对称算法,这意味着双方只共享一个密钥。相同的密钥用于生成签名和验证签名。为了使钥匙保持机密,应特别小心 他们在文档中描述了RS256的优点。有人能给我解释一下使用HS256算法的优点吗?我现在看不到,但我很确定有一些优点。你要求的是HS256优于RS256的优点

在Auth0中,jwt令牌签名有两种算法:RS256和HS256

RS256是一种非对称算法,这意味着有两个密钥:一个公共密钥和一个私有密钥(秘密)。Auth0拥有用于生成签名的密钥,JWT的使用者拥有用于验证签名的公钥

HS256是一种对称算法,这意味着双方只共享一个密钥。相同的密钥用于生成签名和验证签名。为了使钥匙保持机密,应特别小心


他们在文档中描述了RS256的优点。有人能给我解释一下使用HS256算法的优点吗?我现在看不到,但我很确定有一些优点。

你要求的是HS256优于RS256的优点

  • 感知便利
  • 易于理解并开始使用(如果是新的) 至Oauth2/OIDC(与感知便利性相关)
  • 性能(?)
让我们快速查看以下各项:

可感知的便利性/理解该做什么-的确,将clientId和clientSecret复制到应用程序的配置中既容易理解,又能快速完成。然而,今天的库使RS256的设置变得简单-库/框架通常提供检索公钥的功能,并使用与HS256类似的配置进行验证,但不需要提供秘密。如果不熟悉,请使用您选择的技术查看一些Auth0示例,以了解这一点

性能-是的,这里HS256可能有一个利基。将公共证书等缓存在一旁(例如使用node.js进行缓存,请参见和),使用对称密钥并在应用程序中本地使用该密钥,而不需要任何网络请求等,可能会证明更有效。也就是说,大多数优秀的JWKS库/SDK都会处理现成的缓存选项

但实际上,您应该问的问题是,这些好处(性能优化?)是否大于缺点——当然是从安全角度来看

看到这一点,如果仍然不确定,可以在那里(Auth0社区网站)发表评论。Auth0已切换到默认情况下为新客户端使用RS256,其资源api也默认为RS256

RS256的一个主要优点是不需要在客户端应用程序中存储(共同定位)机密,而只有授权服务器(Auth0等)知道私钥,并且机密不会泄露。RS256胜过选择HS256的大多数理由。仅此一点就足以说明为什么RS256在大多数情况下绝对是更好的选择

<强>机密vs公共客户>强-----如果你的客户被认为是A,你应该只考虑HS256。由于机密客户能够保守秘密,您可以选择以两种方式中的一种方式向其签发ID令牌-对于非机密客户,您不应使用HS256,因为根据定义,客户无法保守秘密


还有其他一些考虑因素使得HS256的选择更差,例如,如果存在签名密钥滚动,则需要使用给定的客户端配置手动更新所有应用程序。

可能重复@Vitalii-请参阅我的答案-我是否为您回答了问题?有什么不清楚的吗?