jwt 签名:RS256 或 HS256
jwt signature: RS256 or HS256
在 Auth0 中有 2 种算法用于 jwt 令牌签名:RS256 和 HS256。
RS256 is an asymmetric algorithm which means that there are two keys: one public and one private (secret). Auth0 has the secret key, which is used to generate the signature, and the consumer of the JWT has the public key, which is used to validate the signature.
HS256 is a symmetric algorithm which means that there is only one secret key, shared between the two parties. The same key is used both to generate the signature and to validate it. Special care should be taken in order for the key to remain confidential.
在他们的文档中,他们描述了 RS256
的优点。有人可以向我解释使用 HS256
算法的优势吗,我现在没有看到它们,但我很确定有一些。
您曾询问过 HS256 相对于 RS256 的优势,例如
- 感知便利
- 新手容易理解和上手
到 Oauth2 / OIDC(与感知便利性相关)
- 性能 (?)
让我们快速浏览一下其中的每一个:
感觉方便/明白要做什么 - 确实,将 clientId 和 clientSecret 复制到应用程序的配置中既容易理解又能快速完成。然而,今天的库使 RS256 的设置也变得简单 - 库/框架通常会提供检索 public 密钥的功能,并使用与 HS256 类似的配置进行验证,但无需提供密码。如果不熟悉,请查看一些使用您的技术选择的 Auth0 示例以了解这一点。
性能 - 是的,HS256 可能有一个利基市场。除了缓存 public 证书等(对于使用 node.js 的缓存示例,请参阅 here and here),具有对称密钥并在应用程序本地使用它而根本不需要任何网络请求等,可能证明更有效率。也就是说,大多数优秀的 JWKS 库/sdk 都可以开箱即用地处理缓存选项。
但您真正应该问的问题是这些好处(性能优化?)是否大于缺点 - 当然是从安全角度来看。
看到这个 answer 如果仍然不相信,请随时在那里发表评论(Auth0 社区网站)。 Auth0 已切换为默认为新客户端使用 RS256,其资源 API 也默认为 RS256。
RS256 的一个主要优点胜过大多数选择 HS256 的论点,就是不需要与客户端应用程序一起存储(共同定位)机密 - 私钥仅由授权服务器知道( Auth0 等),秘密不能泄露。仅这一点就可以告诉您为什么 RS256 在大多数情况下是压倒性的更好选择。
机密与 Public 客户 - 如果您的客户被认为是 Confidential Client,您甚至应该只考虑 HS256。由于机密客户能够保守秘密,您可以选择向他们颁发以两种方式之一签名的 ID 令牌 - 对于非机密客户,您永远不应该使用 HS256,因为根据定义,客户无法使用保守秘密。
还有其他考虑因素也使 HS256 成为较差的选择,例如,如果存在签名密钥滚动更新,则需要使用给定的客户端配置手动更新所有应用程序。
在 Auth0 中有 2 种算法用于 jwt 令牌签名:RS256 和 HS256。
RS256 is an asymmetric algorithm which means that there are two keys: one public and one private (secret). Auth0 has the secret key, which is used to generate the signature, and the consumer of the JWT has the public key, which is used to validate the signature.
HS256 is a symmetric algorithm which means that there is only one secret key, shared between the two parties. The same key is used both to generate the signature and to validate it. Special care should be taken in order for the key to remain confidential.
在他们的文档中,他们描述了 RS256
的优点。有人可以向我解释使用 HS256
算法的优势吗,我现在没有看到它们,但我很确定有一些。
您曾询问过 HS256 相对于 RS256 的优势,例如
- 感知便利
- 新手容易理解和上手 到 Oauth2 / OIDC(与感知便利性相关)
- 性能 (?)
让我们快速浏览一下其中的每一个:
感觉方便/明白要做什么 - 确实,将 clientId 和 clientSecret 复制到应用程序的配置中既容易理解又能快速完成。然而,今天的库使 RS256 的设置也变得简单 - 库/框架通常会提供检索 public 密钥的功能,并使用与 HS256 类似的配置进行验证,但无需提供密码。如果不熟悉,请查看一些使用您的技术选择的 Auth0 示例以了解这一点。
性能 - 是的,HS256 可能有一个利基市场。除了缓存 public 证书等(对于使用 node.js 的缓存示例,请参阅 here and here),具有对称密钥并在应用程序本地使用它而根本不需要任何网络请求等,可能证明更有效率。也就是说,大多数优秀的 JWKS 库/sdk 都可以开箱即用地处理缓存选项。
但您真正应该问的问题是这些好处(性能优化?)是否大于缺点 - 当然是从安全角度来看。
看到这个 answer 如果仍然不相信,请随时在那里发表评论(Auth0 社区网站)。 Auth0 已切换为默认为新客户端使用 RS256,其资源 API 也默认为 RS256。
RS256 的一个主要优点胜过大多数选择 HS256 的论点,就是不需要与客户端应用程序一起存储(共同定位)机密 - 私钥仅由授权服务器知道( Auth0 等),秘密不能泄露。仅这一点就可以告诉您为什么 RS256 在大多数情况下是压倒性的更好选择。
机密与 Public 客户 - 如果您的客户被认为是 Confidential Client,您甚至应该只考虑 HS256。由于机密客户能够保守秘密,您可以选择向他们颁发以两种方式之一签名的 ID 令牌 - 对于非机密客户,您永远不应该使用 HS256,因为根据定义,客户无法使用保守秘密。
还有其他考虑因素也使 HS256 成为较差的选择,例如,如果存在签名密钥滚动更新,则需要使用给定的客户端配置手动更新所有应用程序。