我有以下设置来获取访问令牌:

import * as docusign from 'docusign-esign';

const expiresIn = 28800;

export const createClient = async (): Promise<docusign.ApiClient> => {
  const apiClient = new docusign.ApiClient({ basePath: process.env.BASE_PATH, oAuthBasePath: process.env.O_AUTH_BASE_PATH });

  try {
    const response = await apiClient.requestJWTApplicationToken(
      process.env.CLIENT_ID,
      ["signature", "impersonation"],
      Buffer.from(process.env.RSA_PRIVATE_KEY.replace(/\\n/g, '\n')),
      expiresIn
    );

    console.log(response.body.access_token) // -> successfully returns access token

    apiClient.addDefaultHeader("Authorization", "Bearer " + response.body.access_token);
  } catch (error){ throw AppError("My custom error") }

  return apiClient;
}

然后在另一个地方,我有以下函数,它应该创建一个信封:

import { EnvelopeDefinition, EnvelopeRecipients, EnvelopesApi, Signer } from 'docusign-esign';
import { createClient } from "./above-file-path.ts";

export const someFunction = async () => {
  const signer1: Signer = { email: 'my-personal-email-for-testing@gmail.com', name: 'my name', roleName: 'my name' };
  const signer2: Signer = { email: 'client@gmail.com', name: 'client name', roleName: 'Client' };

  const recipients: EnvelopeRecipients = { signers: [signer1, signer2] };

  const dsApiClient = await createClient();

  const envelope: EnvelopeDefinition = {
    emailSubject: 'Please sign this agreement',
    templateId: 'uuid-of-my-template',
    status: 'created',
    recipients,
  };

  const envelopesApi = new EnvelopesApi(dsApiClient);

  try {
    const { envelopeId, errorDetails } = await envelopesApi.createEnvelope(process.env.ACCOUNT_ID, {
      envelopeDefinition: envelope,
    });

    console.log("Success?: ", envelopeId)
  } catch (error) {
    console.log(error) // -> This gives: Unauthorized...{"errorCode":"AUTHORIZATION_INVALID_TOKEN","message":"The access token provided is expired, revoked or malformed. Authentication for System Application failed."}
  }
}

我一直收到AUTHORIZATION_INVALID_TOKEN的错误.

Additional Notes:

  • 我在收到令牌后立即调用此函数,因此我知道令牌没有过期.
  • 我用account-d.docusign.comO_AUTH_BASE_PATH,用https://demo.docusign.net/restapiBASE_PATH.

推荐答案

我花了一秒钟,但我知道发生了什么.您正在获取仅在某些Admin API终结点上有效的JWT应用程序令牌.您需要的是questJwtUserToken()函数.看看this page,了解用户令牌方法是如何工作的.它实际上只有一个参数,那就是被模拟的用户的用户ID.试一试吧.

Node.js相关问答推荐

mongoose 模型填充问题

FHIR 服务器:尽管 JSON 格式正确,但在 POST 请求中接收未定义请求正文

即使卷已设置,Docker Nodemon 也不会热重载

在 TypeScript 中正确键入 MongoDB find 方法

将图像添加到多个产品的条带 checkout 会话中

使用单个 MongoDB 查询更新多个元素

如何修改这个flake.nix,这样我就不用每次加载环境都加载nix包了

TypeError:在使用 Jest、Supertest、Express、Typescript 进行测试时无法读取未定义的属性(读取listen)

Axios 响应循环通过函数只返回第一个映射对象的结果

try 在 NodeJS 项目中实现 SimplePay (OTP) 支付网关,但我无法获得与技术文档中相同的签名

无法关闭 node.js 中的mongoose 连接

node Axios 创建全局令牌变量以在单独的变量头中使用

MongoDB 根据使用聚合的条件从嵌套数组中删除对象

如何刷新 youtube-data-api v3 的访问令牌

Node_redis - 如何删除密钥?

如何在客户端使用 node.js 模块系统

从目录 node Js 中检索文件

在 Jade 包含中使用变量

使用 node.js 循环 JSON

Node.js 中的 PHP exit()/die() 类似功能是什么