JWT 签名算法 HS256 与 RS256

Posted kirito-c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JWT 签名算法 HS256 与 RS256相关的知识,希望对你有一定的参考价值。

前言

JWT 规范的详细说明请见「参考」部分的链接。这里主要说明一下 JWT 最常见的两种签名算法:HS256(HMAC-SHA256) 和 RS256(RSA-SHA256)。

HS256 和 RS256 都是一种消息签名算法,得到的都只是一段无法还原的签名。区别在于消息签名签名验证需要的 「key」不同。

  1. HS256 使用同一个「secret_key」进行签名与验证。一旦 secret_key 泄漏,就毫无安全性可言了。
    • 因此 HS256 只适合集中式认证,签名和验证都必须由可信方进行。
  2. RS256 是使用 RSA 私钥进行签名,使用 RSA 公钥进行验证。公钥即使泄漏也毫无影响,只要确保私钥安全就行。
    • RS256 可以将验证委托给其他应用,只要将公钥给他们就行。

对于单体应用而言,HS256 和 RS256 的安全性没有任何差别。
而对于需要进行多方验证的微服务架构而言,显然 RS256 安全性更高。
只有 user 微服务需要用 RSA 私钥生成 JWT,其他微服务使用公钥即可进行签名验证,私钥得到了更好的保护。

参考

以上是关于JWT 签名算法 HS256 与 RS256的主要内容,如果未能解决你的问题,请参考以下文章

Jwt介绍

在 Knock (rails) 中验证用 RS256 签名的 JWT 令牌

HMAC 256 与 HMAC 512 JWT 签名加密

Python JWT 库 PyJWT 使用 HS256 签名时遇到问题 - 使用 SHA-256 哈希算法的 HMAC

JWT:我应该使用哪种签名算法?

.NET:RS256 签名的 JWT 中的签名无效