You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Blazor WASM中解密JWE Token?

在Blazor WebAssembly中解密ASP.NET Core生成的JWE Token

问题原因

你生成的是**JWE(JSON Web Encryption)**令牌,这是经过加密的Token,而非普通的JWS(仅签名的JWT)。Jose.JWT.Payload方法仅能直接解析未加密的JWS,无法处理加密后的JWE,因此必须先解密才能获取Claims。

解决方案

使用jose-jwt库的Decode方法解密JWE,再解析Payload中的Claims,具体实现如下:

1. 确认依赖安装

确保Blazor WASM项目已安装jose-jwt NuGet包:

Install-Package jose-jwt

2. 修改Token解析方法

private IEnumerable<Claim> ParseTokenClaims(string access_token)
{
    // 与后端生成JWE时使用的加密密钥完全一致
    var encryptionKey = Encoding.UTF8.GetBytes("16CharEncryptKey");
    
    // 解密JWE,获取原始Payload的JSON字符串
    var payloadJson = Jose.JWT.Decode(access_token, encryptionKey);
    
    // 将JSON反序列化为字典,再转换为Claim集合
    var payloadDictionary = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, object>>(payloadJson);
    
    return payloadDictionary?
        .Select(kv => new Claim(kv.Key, kv.Value?.ToString() ?? string.Empty))
        .ToArray() ?? Enumerable.Empty<Claim>();
}

可选:同时验证签名(防止Token篡改)

如果需要确保Token未被篡改,可以在解密时同时验证签名,传入后端的签名密钥:

private IEnumerable<Claim> ParseTokenClaimsWithValidation(string access_token)
{
    var encryptionKey = Encoding.UTF8.GetBytes("16CharEncryptKey");
    var signingKey = Encoding.UTF8.GetBytes("LongerThan-16Char-SecretKey");
    
    // 解密同时验证签名,验证失败会抛出异常
    var payloadJson = Jose.JWT.Decode(access_token, encryptionKey, signingKey);
    
    var payloadDictionary = System.Text.Json.JsonSerializer.Deserialize<Dictionary<string, object>>(payloadJson);
    
    return payloadDictionary?
        .Select(kv => new Claim(kv.Key, kv.Value?.ToString() ?? string.Empty))
        .ToArray() ?? Enumerable.Empty<Claim>();
}

关键注意事项

  • 密钥必须与后端完全一致:加密密钥对应后端的encryptionkey,签名密钥对应后端的secretKey,编码格式也要统一(此处均为UTF8)。
  • jose-jwt会自动从JWE头部识别加密算法(对应后端的Aes128KW和Aes128CbcHmacSha256),无需手动指定。
  • 解密或签名验证失败时库会抛出异常,建议添加异常处理逻辑。

内容的提问来源于stack exchange,提问作者Shahram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:55:26