JWT 签名算法 HS256 与 RS256
Posted kirito-c
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JWT 签名算法 HS256 与 RS256相关的知识,希望对你有一定的参考价值。
前言
JWT 规范的详细说明请见「参考」部分的链接。这里主要说明一下 JWT 最常见的两种签名算法:HS256(HMAC-SHA256) 和 RS256(RSA-SHA256)。
HS256 和 RS256 都是一种消息签名算法,得到的都只是一段无法还原的签名。区别在于消息签名与签名验证需要的 「key」不同。
- HS256 使用同一个「secret_key」进行签名与验证。一旦 secret_key 泄漏,就毫无安全性可言了。
- 因此 HS256 只适合集中式认证,签名和验证都必须由可信方进行。
- RS256 是使用 RSA 私钥进行签名,使用 RSA 公钥进行验证。公钥即使泄漏也毫无影响,只要确保私钥安全就行。
- RS256 可以将验证委托给其他应用,只要将公钥给他们就行。
对于单体应用而言,HS256 和 RS256 的安全性没有任何差别。
而对于需要进行多方验证的微服务架构而言,显然 RS256 安全性更高。
只有 user 微服务需要用 RSA 私钥生成 JWT,其他微服务使用公钥即可进行签名验证,私钥得到了更好的保护。
参考
以上是关于JWT 签名算法 HS256 与 RS256的主要内容,如果未能解决你的问题,请参考以下文章
在 Knock (rails) 中验证用 RS256 签名的 JWT 令牌