【发布时间】:2017-04-03 23:13:28
【问题描述】:
我正在开发一个 ASP.Net Core Web 应用程序,并将使用 Auth0 进行用户身份验证。
我很难确定我的 JSON Web 令牌签名算法应该是 RS256 还是 HS256。
根据我找到的信息,我仍然无法确定它的正面或反面。有什么想法吗?
【问题讨论】:
标签: asp.net asp.net-core jwt auth0
我正在开发一个 ASP.Net Core Web 应用程序,并将使用 Auth0 进行用户身份验证。
我很难确定我的 JSON Web 令牌签名算法应该是 RS256 还是 HS256。
根据我找到的信息,我仍然无法确定它的正面或反面。有什么想法吗?
【问题讨论】:
标签: asp.net asp.net-core jwt auth0
尽管两种算法都使用 SHA-256,但它们有着根本的不同:
RS256(使用 SHA-256 的 RSASSA-PKCS1-v1_5)依赖于使用特定私钥生成数字签名。HS256(使用 SHA-256 的 HMAC)依靠共享密钥加上加密哈希函数 (SHA-256) 来生成消息验证码 (MAC)。验证使用上述每种算法发布的令牌意味着对于RS256,进行验证的实体知道与用于签名的私钥相关联的公钥,而对于HS256,这意味着该实体知道共享秘密.
在一种与另一种之间进行选择通常是由将验证已发行令牌的应用程序的特性所驱动的。
如果您想在基于浏览器的应用程序上验证令牌,则自动排除使用 HS256,因为这意味着您必须将共享密钥包含在任何人都可以访问的地方,使其完全没用,因为现在任何有权访问代码的人都可以发布自己的签名令牌。
总之,如果令牌验证是在受控环境(服务器端)上完成的,您可以选择HS256,因为它更容易上手。但是,如果令牌验证是在恶劣的环境中完成的,您需要使用基于非对称加密的算法;在本例中为RS256。
【讨论】: