验证 JWT 令牌 C# 的签名

2023-12-10

我在验证我获得的 JWT 令牌的签名时遇到一些问题。该令牌使用 HS256 进行签名。我尝试创建签名以证明收到的签名的代码是:

JwtSecurityToken token = tokenHandler.ReadJwtToken(tokenString);

byte[] keyBytes = Encoding.UTF8.GetBytes("secret");

HMACSHA256 hmac = new HMACSHA256(keyBytes);
byte[] signatureBytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(token.RawHeader + "." + token.RawPayload));
string signature = Convert.ToBase64String(signatureBytes);

我从收到的令牌中获得的签名例如:

pYscLlinuNhO-sFyEIRRLZP7yrl8GopGJ3I6QSxg2tU

但我从算法中得到的签名是这样的:

pYscLlinuNhO+sFyEIRRLZP7yrl8GopGJ3I6QSxg2tU=

所以签名很接近,但不相等。我不明白我在验证签名时做错了什么。字母和数字似乎每次都是正确的,但特殊字符大多不同,并且签名末尾总是有一个“=”。 也许有人知道我做错了什么。


JWT 的三个部分是Base64Url 编码:

JWT 表示为一系列 URL 安全部分,由 句点('.')字符。每个部分都包含一个base64url编码的 价值。

但你用过Base64编码。 Base64Url 使用“-”和“_”代替“+”和“/”,并且还省略了末尾的填充“=”。

这是一个例子如何在C#中将base64转换为bas64url编码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证 JWT 令牌 C# 的签名 的相关文章

随机推荐

  • 在 WPF 应用程序中嵌入 Unity3D 应用程序

    我想在 WPF 中开发一个新的 CAD 软件 而不是使用 WPF 3D 是否可以使用 Unity3D 作为我的图形引擎 能够根据 WPF 中的数据对象旋转 平移 缩放和查看 3D 图形对象 我问这个问题的原因是 Unity 是一个游戏引擎
  • 重写 WPF 控件

    我有一个来自第三方的 WPF 控件 ParentWPFControl 我想继承该控件 我们将其称为子类 ChildWPFControl 在这个过程中 我计划重写一些后端逻辑和部分前端样式 前者我可以做得很好 但后者我有问题 我尝试对子国家
  • java.security.cert.CertPathValidatorException:找不到证书路径的信任锚。在 API 上小于 24

    com android volley NoConnectionError javax net ssl SSLHandshakeException java security cert CertPathValidatorException T
  • 删除其中没有资源的 Azure 资源组

    我正在尝试查找其中没有资源的所有 Azure RM 资源组 并使用 PowerShell 删除这些资源组 使用 Portal 删除非常耗时 使用 powershell 我可以通过使用以下代码来完成 在 powershell 中是否有更好的方
  • 与 protobuf-net 和 C# 的接口

    有谁知道建立一个的正确方法是什么合约原型 for an 界面 我收到以下异常 一旦生成序列化器 类型就无法更改 仅使用属性 使用的代码 ProtoContract public class Lesson5TestClass2 ILesson
  • 在单个语句中处理区分大小写和不区分大小写的正则表达式模式

    我有一个小的正则表达式要处理 我有两个不同的术语 美国 我想忽略大小写来匹配 US 我想匹配without忽略大小写 我想在单个正则表达式替换语句中执行以下两个正则表达式替换 clntxt re sub i United States US
  • 通过代码隐藏中的按钮单击处理程序中的 ID 访问 DataList 中的 TextBox

    我有一个文本框 保存在数据列表中 我需要通过 ID 找到它 以便我可以将写入该文本框的文本插入到数据库中 这是我的包含文本框的 aspx 页面
  • Microsoft 日志记录应用程序块和多线程

    我是日志应用程序块 4 1 的新手 有人编写过从多个线程使用日志记录应用程序块的应用程序吗 我问这个问题是因为 Logger 是一个静态类 并且可能会从多个线程写入同一日志文件 日志应用程序块是线程安全的 这意味着您可以从多个线程调用其公共
  • cURL 无法在本地服务器中使用客户端证书

    我使用 XAMPP 设置了本地服务器 我有两个 PHP 脚本 一个发送者和一个接收者 我正在尝试使用 HTTP over SSL HTTPS 将 XML 文件从发送方发送到接收方 我创建了一个自签名证书 配置了 XAMPP 并且我在发件人上
  • @solana/web3.js 有 ERC721 元数据的 API 吗?

    给定一个代币铸造地址 我正在寻找一种方法来访问 ERC721 代币的元数据 solana web3 js 中有 API 吗 Solana 将代币元数据存储在从原始代币地址派生的地址中https docs solana com develop
  • 通过动态属性从对象数组创建对象

    我有一个对象数组 options width 10 height 20 width 20 height 40 width 30 height 60 我想转换为以下内容 width 10 20 30 height 20 40 60 现在请记住
  • SqlDataAdapter.update() 不更新数据库

    我正在使用 PostLikes 表搜索 PostId UserId SqlDataAdapter 如果找到该行 我正在使用SqlCommandBuilder GetDeleteCommand 生成删除指令并删除底层行 如果找不到该行 那么我
  • 以编程方式将模块/函数集转换为 Python 类

    假设我有一个包含一堆方法的文件 如 chunk methods py def one x return int x def two y return str y 有没有办法通过导入模块整体或选择方法来获取该组方法 并将导入的方法转换为类 例
  • UIApplicationBackgroundRefreshStatusDidChangeNotification 使用没有相应的委托方法

    我觉得UIApplicationBackgroundRefreshStatusDidChangeNotificationiOS 7 中引入的如果不支持 UIApplication 委托方法就没有什么用处 因为 当用户打开我的应用程序的后台刷
  • UWP/C# - AQS 和 USB 设备问题

    我尝试编写的 UWP 应用程序出现问题 我正在连接到我已编程的自定义嵌入式 USB 批量设备 它实际上是 Cypress Semiconductor 的开箱即用示例 我正在使用 WinUSB sys 驱动程序 该驱动程序使用设备中嵌入的 M
  • MySQL:“where 子句中的列‘column_name’不明确”

    我加入 2 个表 例如 table A user id ticket id user name table B ticket id ticket name 如果我运行以下查询 SELECT table A user id table A u
  • 游戏的 3D 模型格式

    我四处寻找可以在我正在构建的游戏中使用的良好模型格式 它是一款可在任何平台上运行的单人角色扮演游戏 我查看了 md2 3 和 5 种格式 obj 和 3ds 但我找不到我想要的东西 我所需要的只是一个带有动画的 3D 模型 我可以将纹理应用
  • Powershell 为什么两个json内容有区别?

    我有两个变量Byte type 我选择此类型是为了满足特定需求 因此需要保留它 声明为 first New Object Byte 32 second New Object Byte 32 并且 我初始化了两个变量的每个索引 现在 我创建了
  • 如何将十六进制字符串转换为int数组

    我有十六进制字符串 例如 01ff6fee32785e366f710df10cc542B4 我正在尝试将它们 有效地 转换为 2 个字符乘 2 个字符的 int 数组 例如 1 255 I tried c 8db6796fee32785e3
  • 验证 JWT 令牌 C# 的签名

    我在验证我获得的 JWT 令牌的签名时遇到一些问题 该令牌使用 HS256 进行签名 我尝试创建签名以证明收到的签名的代码是 JwtSecurityToken token tokenHandler ReadJwtToken tokenStr