6.69JwtTokenUtility 解析 JWT Token

创建于 2026 年 8 月 17 日约 2 分钟读完

JwtTokenUtility 是一个轻量级的 JWT 实用工具类,无需依赖外部 JWT 库即可解析 JWTPayload 部分并提取常见的声明(Claims),适用于需要快速获取 JWT 中过期时间、签发者、主题等信息的场景。

解析 JWTPayload

通过 JwtTokenUtility.Parse 方法可以解析完整 JWT 字符串或单独的 Payload 片段,返回一个 JwtPayload 实例:

cs
var jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";var jwtPayload = JwtTokenUtility.Parse(jwt);// 获取过期时间(UTC)var exp = jwtPayload.GetExpirationTimeUtc();

Parse 方法内部会自动处理标准 Base64Url 编码并补齐 =,无需手动处理。

读取标准声明

JwtPayload 提供了完整的标准 JWT 声明读取方法:

cs
var jwtPayload = JwtTokenUtility.Parse(jwt);string? issuer = jwtPayload.GetIssuer();       // issstring? subject = jwtPayload.GetSubject();     // substring? audience = jwtPayload.GetAudience();   // audlong? expiration = jwtPayload.GetExpiration(); // exp (Unix 秒)long? issuedAt = jwtPayload.GetIssuedAt();     // iat (Unix 秒)long? notBefore = jwtPayload.GetNotBefore();   // nbf (Unix 秒)string? jwtId = jwtPayload.GetJwtId();         // jti// 更多便捷方法...

检查 JWT 是否过期或有效

cs
// 是否已过期bool expired = jwtPayload.IsExpired();// 是否当前有效(已生效且未过期)bool active = jwtPayload.IsActive();

读取自定义声明

除了标准声明,JwtPayload 还支持读取任意自定义声明的值:

cs
var jwtPayload = JwtTokenUtility.Parse(jwt);// 读取字符串声明string? name = jwtPayload.GetString("name");// 读取整数声明int? age = jwtPayload.GetInt32("age");long? timestamp = jwtPayload.GetInt64("timestamp");// 检查是否存在某声明bool hasEmail = jwtPayload.Contains("email");

获取原始 JSON 字符串

JwtPayload 对象暴露了原始 JSON 字符串,方便进行自定义解析:

cs
var jwtPayload = JwtTokenUtility.Parse(jwt);string rawJson = jwtPayload.RawJson;

Access Token 管理结合使用

该工具常用于 FurionAccessTokenProvider 中,从服务端返回的刷新令牌中解析过期时间并更新 HttpAccessTokenExpiresAt

cs
// 在 Configure 方法的响应后回调中httpRequestBuilder.SetOnPostReceiveResponse(httpResponseMessage =>{    var newRefreshToken = httpResponseMessage.Headers.GetValues("x-access-token").FirstOrDefault();    if (!string.IsNullOrWhiteSpace(newRefreshToken))    {        httpAccessToken.ExpiresAt = JwtTokenUtility.Parse(newRefreshToken).GetExpirationTimeUtc()!.Value;    }});

通过 JwtTokenUtility,您可以轻松地解析 JWT、提取声明并进行有效性判断,无需引入笨重的第三方 JWT 库,尤其适合在客户端侧或轻量级 SDK 中使用。