使用 Google Apps 脚本生成 JSON Web 令牌 (RS256) 以访问 DocuSign
Generate JSON Web Token (RS256) to access DocuSign using Google Apps Script
我正在尝试仅使用 Apps 脚本从 Docusign 发送信封。
function createJWT(){
const header = {
alg: 'RS256',
typ: 'JWT',
};
const now = Date.now();
const expires = new Date(now);
expires.setHours(expires.getHours() + 1);
const payload = {
exp: Math.round(expires.getTime() / 1000),
iat: Math.round(now / 1000),
iss: "integrator key",
sub: "user id",
aud: "url",
scope: "scopes"
};
var toSign = Utilities.base64EncodeWebSafe(JSON.stringify(header)) + '.' + Utilities.base64EncodeWebSafe(JSON.stringify(payload));
toSign = toSign.replace(/=+$/, '');
var privateKey = "-----BEGIN RSA PRIVATE KEY-----<private key here>-----END RSA PRIVATE KEY-----";
const signatureBytes = Utilities.computeRsaSha256Signature(
toSign,
privateKey
);
const signature = Utilities.base64EncodeWebSafe(signatureBytes);
return toSign + '.' + signature;
}
Utilities.computeRsaSha256Signature() returns:
Exception: Invalid argument: key
如何使用 RSA 密钥对 创建 JWT?
Public/Private 来自 Docusign 的密钥:
-----BEGIN PUBLIC KEY-----\n{public key here}\n-----END PUBLIC KEY----
------开始 RSA 私钥 KEY-----\n{这里是私钥}\n-----结束 RSA 私钥-----
使用 Utilities.base64Encode()
而不是 Utilities.base64EncodeWebSafe()
。
一旦你进行了替换,删除带有 toSign.replace(...)
的行,你就可以开始了。
更新
上述修复仍然适用,但我想我知道您的核心问题是什么。查看 this SO thread。
Utilities.computeRsaSha256Signature()
需要一个以 BEGIN PRIVATE KEY
而非 BEGIN RSA PRIVATE KEY
开头的私钥。您需要找到与 Google Apps 脚本兼容的第三方库,该库可以计算第二种形式的密钥 (PKCS#1)。
我正在尝试仅使用 Apps 脚本从 Docusign 发送信封。
function createJWT(){
const header = {
alg: 'RS256',
typ: 'JWT',
};
const now = Date.now();
const expires = new Date(now);
expires.setHours(expires.getHours() + 1);
const payload = {
exp: Math.round(expires.getTime() / 1000),
iat: Math.round(now / 1000),
iss: "integrator key",
sub: "user id",
aud: "url",
scope: "scopes"
};
var toSign = Utilities.base64EncodeWebSafe(JSON.stringify(header)) + '.' + Utilities.base64EncodeWebSafe(JSON.stringify(payload));
toSign = toSign.replace(/=+$/, '');
var privateKey = "-----BEGIN RSA PRIVATE KEY-----<private key here>-----END RSA PRIVATE KEY-----";
const signatureBytes = Utilities.computeRsaSha256Signature(
toSign,
privateKey
);
const signature = Utilities.base64EncodeWebSafe(signatureBytes);
return toSign + '.' + signature;
}
Utilities.computeRsaSha256Signature() returns:
Exception: Invalid argument: key
如何使用 RSA 密钥对 创建 JWT?
Public/Private 来自 Docusign 的密钥:
-----BEGIN PUBLIC KEY-----\n{public key here}\n-----END PUBLIC KEY----
------开始 RSA 私钥 KEY-----\n{这里是私钥}\n-----结束 RSA 私钥-----
使用 Utilities.base64Encode()
而不是 Utilities.base64EncodeWebSafe()
。
一旦你进行了替换,删除带有 toSign.replace(...)
的行,你就可以开始了。
更新
上述修复仍然适用,但我想我知道您的核心问题是什么。查看 this SO thread。
Utilities.computeRsaSha256Signature()
需要一个以 BEGIN PRIVATE KEY
而非 BEGIN RSA PRIVATE KEY
开头的私钥。您需要找到与 Google Apps 脚本兼容的第三方库,该库可以计算第二种形式的密钥 (PKCS#1)。