NodeJS DocuSign 使用 JWT 授权流程请求访问令牌 Returns invalid_request

NodeJS DocuSign Request For Access Token Using JWT Grant Flow Returns invalid_request

我要求我的应用程序自行检索访问令牌以执行远程签名。我选择使用 JWT Grant Authentication 方法。

NodeJS 代码生成 JWT 令牌

let jwt = require("jsonwebtoken");
let fs = require('fs');
const privateKey = fs.readFileSync('./env/docusign/ds.pem');

let header = {
  "typ": "JWT",
  "alg": "RS256",
};

let now = Date.now()/1000;
let later = now + (1000 * 60 * 60);
let body = {
  iss: "806eb2f5-8233-408d-9f6f-586699e316be",
  sub: "6ceb4b30-10fb-4e4f-96d0-916b7c844726",
  iat: now,
  exp: later,
  aud: "account-d.docusign.com",
  scope: "signature impersonation",
};

header = Buffer.from(JSON.stringify(header)).toString('base64');
body = Buffer.from(JSON.stringify(body)).toString('base64');

let payload = header + "." + body;
let token = jwt.sign(payload, privateKey, { algorithm: "RS256" });
console.log("token", token);

我使用令牌发送 POST 请求到:

并得到回复:

我做错了什么?

我建议您改用 DocuSign SDK,因为它具有易于使用的 JWT 授权方法。

但如果您想自己推出,请将您的软件与 SDK's JWT source 进行比较。

已添加

此外,jwt.sign 似乎负责 header。所以尝试改变

header = Buffer.from(JSON.stringify(header)).toString('base64');
body = Buffer.from(JSON.stringify(body)).toString('base64');

let payload = header + "." + body;
let token = jwt.sign(payload, privateKey, { algorithm: "RS256" });
console.log("token", token);

收件人:

let token = jwt.sign(body, privateKey, { algorithm: "RS256" });
console.log("token", token);

SDK source