Estoy tratando de enviar sobres desde Docusign usando solo Apps Script.
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() devuelve:
Excepción: argumento no válido: clave
¿Cómo puedo crear JWT usando pares de claves RSA ?
Claves públicas/privadas de Docusign:
-----COMENZAR CLAVE PÚBLICA-----\n{clave pública aquí}\n-----FIN CLAVE PÚBLICA----
------COMENZAR LA CLAVE PRIVADA DE RSA-----\n{clave privada aquí}\n-----FIN DE LA CLAVE PRIVADA DE RSA-----
Use Utilities.base64Encode() en lugar de Utilities.base64EncodeWebSafe() .
Una vez que realice esa sustitución, elimine la línea con toSign.replace(...) y debería estar listo para continuar.
ACTUALIZAR
Las correcciones anteriores aún se aplican, pero creo que sé cuál es su problema principal. Echa un vistazo a este hilo SO .
Utilities.computeRsaSha256Signature() espera una clave privada que comience con BEGIN PRIVATE KEY no BEGIN RSA PRIVATE KEY . Deberá encontrar una biblioteca de terceros compatible con Google Apps Script que pueda calcular claves de la segunda forma (PKCS#1).