0

我正在尝试仅使用 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()返回:

例外:无效参数:键

如何使用RSA 密钥对创建 JWT ?
来自 Docusign 的公钥/私钥:
-----BEGIN PUBLIC KEY-----\n{这里的公钥}\n-----END PUBLIC KEY----
------BEGIN RSA PRIVATE KEY-----\n{这里的私钥}\n-----END RSA PRIVATE KEY-----

4

1 回答 1

0

使用Utilities.base64Encode()而不是Utilities.base64EncodeWebSafe().

一旦您进行了替换,请删除该行,toSign.replace(...)您应该一切顺利。


更新

上述修复仍然适用,但我想我知道您的核心问题是什么。看看这个 SO 线程

Utilities.computeRsaSha256Signature()BEGIN PRIVATE KEY需要一个以not开头的私钥BEGIN RSA PRIVATE KEY。您需要找到与 Google Apps 脚本兼容的第 3 方库,该库可以计算第二种形式的密钥 (PKCS#1)。

于 2021-09-10T14:18:26.417 回答