架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 16|回复: 0

[资料] .NET/C# 两种方式验证 jwt token 签名有效性

[复制链接]
发表于 昨天 22:29 | 显示全部楼层 |阅读模式
需求:当请求接口的时候,通过会带上 jwt token 认证信息,后端需要验证 token 签名是否有效,然后,再验证是否过期、签发信息等。

JSON Web Key Set URI

jwks_uri(JSON Web Key Set URI)是 OAuth 2.0 和 OpenID Connect (OIDC) 规范中的一个标准配置项。

简单来说,它是一个公开的 URL 地址(或称端点),指向认证服务器发布其「公钥集」的地方。在标准 OIDC 流程中,认证服务器会提供一个服务发现地址(Discovery Endpoint),里面就包含 jwks_uri 地址。

它的通俗比喻

如果把认证服务器签发的 JWT (或 ID Token) 比作一封盖了物理公章的信件,那么:

• 私钥:是认证服务器手里锁在保险柜里的「实体印章」,用来盖章(签名)。
• jwks_uri:就是认证服务器在官方网站上贴出的「印章图案公示处」。
• 第三方应用(客户端或资源服务器):收到信件后,去这个 jwks_uri 地址下载印章图案(公钥),比对信件上的章对不对,以此证明信件确实由官方发出、且中途没被篡改。

其中 keys 集合里面 use 的含义是:

"sig":Signature(签名),用于验证签名或生成签名,以确保数据的完整性和防篡改。
"enc":Encryption(加密),用于加密数据或解密数据,以及管理密钥(Key Encryption),以确保数据的保密性。

如下图:

QQ截图20261022215938.jpg

解析 jwt 信息

首先安装 nuget 包:System.IdentityModel.Tokens.Jwt,读取 jwt 里面的 Claims 信息,代码如下:

输出如下:
Bearer
1059ec2e-ffa8-4ff5-bc47-f25d7e37aa5a

验证 jwt 签名有效性

还是需要先引用 System.IdentityModel.Tokens.Jwt 包,有两种方式验证签名的有效性。

方案一:X.509 Certificate Chain

根据 X.509 国际标准进行反序列化,提取出证书里的所有结构化信息(如公钥、签发者、有效期、序列号等),并生成一个 X509Certificate2 对象,最终,拿到里面藏着的 RSA 公钥来验证 JWT Token,代码如下:
如下图:

QQ截图20261022222744.jpg

方案二:JsonWebKey

转换为安全密钥(Security Key):它会自动识别里面的算法类型。然后,再校验 token 的有效性,代码如下:
(完)




上一篇:.NET/C# 基于 Roslyn 获取对象属性、字段、注释
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-10-23 04:27

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表