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

在Rider HTTP Client前置脚本生成JWT Token遇问题求助

问题分析与修正方案

你的脚本生成的JWT无法解析,核心是没遵循JWT的标准生成流程,具体问题和修正如下:

原脚本的错误点

  • Header/Payload处理错误:JWT要求直接对Header和Payload的JSON字符串做Base64Url编码,而不是先做SHA512哈希后再编码。你现在的操作相当于把哈希值作为Header/Payload内容,完全不符合JWT结构。
  • 签名部分多余编码:签名结果做Base64Url编码后已经是URL安全格式,不需要再用encodeURIComponent转义,这会导致jwt.io无法识别签名部分。

修正后的脚本

// 1. 构造Header和Payload的JSON字符串
let header = JSON.stringify({"alg": "HS512", "typ": "JWT"}); // 建议加上typ字段,符合JWT标准
let body = JSON.stringify({
    "username": request.environment.get('the_big_username'),
    "entity": request.environment.get('the_big_entity'),
    "datetime": new Date().toISOString()
});

let theBigSecret = request.environment.get("the_big_secret");

// 2. 对Header和Payload做Base64Url编码(Rider的crypto工具支持直接转Base64Url)
let theHeader = crypto.base64UrlEncode(header);
let theBody = crypto.base64UrlEncode(body);

// 3. 拼接Header和Payload,生成签名原文
const content = `${theHeader}.${theBody}`;

// 4. 用HMAC-SHA512签名,结果做Base64Url编码
let theSignature = crypto.hmac.sha512()
    .withTextSecret(theBigSecret)
    .updateWithText(content)
    .digest()
    .toBase64(true); // toBase64(true)就是Base64Url编码(去掉=、+换成-、/换成_)

// 5. 拼接成完整JWT
const allTogetherNow = `${content}.${theSignature}`;

// 存入变量
request.variables.set('the_big_token', allTogetherNow);

补充说明

  • 建议在Header里加上"typ": "JWT"字段,这是JWT标准里的可选但推荐的字段,能让解析工具更准确识别。
  • Rider HTTP Client的crypto.base64UrlEncode方法可以直接生成符合要求的Base64Url编码字符串,也可以用toBase64(true)来实现(参数true代表生成Base64Url格式),两种方式效果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:15:54