C#签名算法HS256和RS256实战演练

一、HS256和RS256的区别  

HS256 使用密钥生成固定的签名,RS256 使用成非对称进行签名。

简单地说,HS256 必须与任何想要验证 JWT的 客户端或 API 共享秘密。 
RS256 生成非对称签名,这意味着必须使用私钥来签签名 JWT,并且必须使用对应的公钥来验证签名。与对称算法不同,使用 RS256 可以保证服务端是 JWT 的签名者,因为服务端是唯一拥有私钥的一方。这样做将不再需要在许多应用程序之间共享私钥。

二、JWT常用的两种签名算法 

JWT签名算法中,一般有两个选择,一个采用HS256,另外一个就是采用RS256。

签名实际上是一个加密的过程,生成一段标识(也是JWT的一部分)作为接收方验证信息是否被篡改的依据。

RS256 (采用SHA-256 的 RSA 签名) 是一种非对称算法, 它使用公共/私钥对: 标识提供方采用私钥生成签名, JWT 的使用方获取公钥以验证签名。由于公钥 (与私钥相比) 不需要保护, 因此大多数标识提供方使其易于使用方获取和使用 (通常通过一个元数据URL)。

另一方面, HS256 (带有 SHA-256 的 HMAC 是一种对称算法, 双方之间仅共享一个 密钥。由于使用相同的密钥生成签名和验证签名, 因此必须注意确保密钥不被泄密。

在开发应用的时候启用JWT,使用RS256更加安全,你可以控制谁能使用什么类型的密钥。另外,如果你无法控制客户端,无法做到密钥的完全保密,RS256会是个更佳的选择,JWT的使用方只需要知道公钥。

由于公钥通常可以从元数据URL节点获得,因此可以对客户端进行进行编程以自动检索公钥。如果采用这种方式,从服务器上直接下载公钥信息,可以有效的减少配置信息。

三、JWT介绍

JWT 代表 JSON Web Token ,它是一种用于认证头部的 token 格式。这个 token 帮你实现了在两个系统之间以一种安全的方式传递信息。出于教学目的,我们暂且把 JWT 作为“不记名 token”。一个不记名 token 包含了三部分:header,payload,signature。

header 是 token 的一部分,用来存放 token 的类型和编码方式,通常是使用 base-64 编码。

payload 包含了信息。你可以存放任一种信息,比如用户信息,产品信息等。它们都是使用 base-64 编码方式进行存储。

signature 包括了 header,payload 和密钥的混合体。密钥必须安全地保存储在服务端。

你可以在下面看到 JWT 刚要和一个实例 token:

 

 

四、HS256和RS256实战演练

一、HS256使用:

根据指定用户生成Token

 

验证指定用户的Token是否有效

 

二、HS256使用:

生成一个rsa非对称密钥对。

 

私钥加密,公钥验签。

 

五、源代码示例下载

扫码关注下方微信公众号,回复8ks5关键字获取源代码下载地址。

有问题微信公众号回复wx关键字,加阿笨的个人微信号。

 

posted @ 2021-01-27 22:09  跟着阿笨一起玩.NET  阅读(1142)  评论(0编辑  收藏  举报