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

PHP Laravel请求JWT用户令牌返回invalid_request错误如何解决

问题排查解决步骤

你遇到的400 invalid_request是JWT认证场景下的通用参数错误,结合PHP+Laravel+相关签名SDK的使用场景,按优先级依次排查:

1. 基础参数校验

  • 确认static::$INTEGRACION_KEY(集成密钥)、static::$USER_ID(用户ID)的取值完全正确,没有多余空格、大小写错误,注意此处的用户ID是API专属用户名不是账号登录邮箱
  • 确认static::$BASEPATH的取值和你使用的环境匹配:
    • 测试环境用account-d.docusign.com
    • 生产环境用account.docusign.com
      不要带多余的路径后缀、http/https前缀
  • 确认私钥文件读取正常:file_get_contents执行后没有返回false,读取到的内容是完整的-----BEGIN RSA PRIVATE KEY-----开头、-----END RSA PRIVATE KEY-----结尾的私钥文本。Laravel环境下如果相对路径寻址异常,可以替换为file_get_contents(base_path(env('RUTA_ESIGN_KEY')))确保读取到正确的文件。

2. 权限与环境校验

  • 确认开放平台后台你的集成密钥已经开启了JWT认证权限,且对应USER_ID的用户已经完成了应用授权
  • 确认scope拼写正确,当前signature impersonation是标准配置,不要新增拼写错误的scope字段
  • 确认你的服务器时间是同步的,JWT令牌的时间校验依赖服务器时间,若服务器时间和平台服务器时间差超过1小时会直接返回invalid_request错误

3. 调试优化方案

你可以先添加调试代码输出请求前的所有参数,确认参数没有异常:

// 加在requestJWTUserToken调用之前
var_dump(static::$INTEGRACION_KEY, static::$USER_ID, $privateKey, static::$BASEPATH);
// 重点校验私钥内容有没有被转义、截断

如果参数都正常,可以手动构造JWT请求打印完整的请求响应内容,定位具体错误字段:

use Illuminate\Support\Facades\Http;

$basePath = static::$BASEPATH;
$response = Http::post("https://{$basePath}/oauth/token", [
    'grant_type' => 'urn:ietf:params:oauth:grant-type:jwt-bearer',
    'assertion' => '自行生成的JWT串' // 可通过firebase/php-jwt库自行生成验证格式
]);
dd($response->status(), $response->body());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:36:04