【问题标题】:NodeJS DocuSign Request For Access Token Using JWT Grant Flow Returns invalid_requestNodeJS DocuSign 使用 JWT 授予流程请求访问令牌返回 invalid_request
【发布时间】:2021-05-18 08:40:07
【问题描述】:

我要求我的应用程序自行检索访问令牌以执行远程签名。我选择使用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 请求发送到:

并得到了回应:

我做错了什么?

【问题讨论】:

  • 欢迎来到 StackOverflow!请检查(接受)您每个问题的最佳答案。谢谢!
  • 您可以将断言插入到 JWT 解释工具(如 jwt.io)中以确认其有效。

标签: node.js docusignapi


【解决方案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

【讨论】:

  • 非常感谢!我遵循了 Node.js 代码示例并使其工作。
猜你喜欢
  • 2020-09-13
  • 2020-11-01
  • 1970-01-01
  • 2021-01-11
  • 2022-08-16
  • 2020-03-31
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
相关资源
最近更新 更多