我要求我的应用程序自行检索访问令牌以执行远程签名。我选择使用 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);
我做错了什么?
答案 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);