NodeJS DocuSign 请求访问令牌使用 JWT 授权流返回 invalid_request

时间:2021-02-15 12:51:40

标签: node.js docusignapi

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

NodeJS 代码生成 JWT Token

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 请求发送到: enter image description here

并得到回复: enter image description here

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

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

已添加

此外,看起来 jwt.sign 负责处理标题。所以尝试改变

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