2017-08-25 103 views
1

在Auth0中,有2种用于jwt令牌签名的算法:RS256和HS256。jwt签名:RS256或HS256

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

HS256是一种对称算法,这意味着只有一个秘密密钥,在双方之间共享。使用相同的密钥来生成签名并验证它。为了使密钥保密,应特别小心。

在他们的文档中,他们描述了RS256的优点。有人可以解释我使用HS256算法的优点吗,我现在没有看到它们,但我确信它有一些。

+1

可能重复[RS256 vs HS256:有什么区别?](https://stackoverflow.com/questions/39239051/rs256-vs-hs256-whats-the-difference) –

+0

@Vitalii - 请参阅我的回答 - 我是否为你回答这个问题?有什么不清楚的地方? – arcseldon

+0

感谢您的承认! – arcseldon

回答

2

您已经询问了HS256优于RS256的好处,例如:

  • 认为方便
  • 容易理解并开始使用,如果新 到OAuth2/OIDC(与感知的便利)
  • 性能(?)

让我们快速浏览一下其中每一个:

知觉方便/理解该怎么做 - 确实是抄袭一个客户tId和clientSecret在应用程序中的配置很容易理解,并且很快完成。但是,今天的库使得RS256的设置简单 - 库/框架通常会提供检索公钥的功能,并执行与HS256类似配置的验证,但不需要提供秘密。如果您不熟悉,请参阅一些使用您的技术选项的Auth0示例,以了解这一点。

性能 - 是的,这里HS256可能有一个利基。除了缓存公共证书等之外,拥有对称密钥并在应用程序中使用本地应用程序而不需要任何网络请求等,可能证明效率更高。

但是真的应该问的问题是这些好处(性能优化?)是否超过了缺点 - 当然从安全角度来看。

看到这个answer,如果仍然不服气,随意留言(Auth0社区网站)。默认情况下,Auth0已切换到使用RS256的新客户端,其资源API也默认为RS256。

RS256的一个主要优点是胜过大多数选择HS256的参数,只需简单地说就是不需要在客户端应用程序中存储(共同定位)秘密 - 私钥仅由授权服务器知道(Auth0等等),秘密不能泄露。仅此一项就能告诉你为什么RS256绝大多数情况下都是更好的选择。

机密vs公众客户 - 如果您的客户被认为是Confidential Client,您应该只考虑HS256。由于机密客户能够保密,因此您可以选择使用以下两种方式之一签发的身份证令牌 - 对于非机密客户,您绝不应使用HS256,因为根据定义,客户端无法使用保密秘密。

HS256还有其他一些考虑因素,例如需要手动更新所有使用给定客户端配置的应用程序(如果有签名密钥翻转)。

0

就我而言,使用对称算法的优点是创建一个令牌,只有服务器知道如何读取它。对此,一个对称算法是最好的,因为速度很快并且产生一个小的结果。