DocuSign JWT无效访问令牌

时间:2020-10-29 23:17:22

标签: c# .net oauth jwt docusignapi

我已在测试项目中将DocuSign eSign NuGet软件包从4.1.1升级到最新版本5.1.0。

测试代码:

            var auth = DocuSign.eSignature.JWTAuth.AuthenticateWithJWT();
            string accessToken = auth.accessToken;
            string accountId = auth.accountId;
            string basePath = auth.baseUri;

            var config = new Configuration(basePath);
            config.AddDefaultHeader("Authorization", "Bearer " + accessToken);

            EnvelopeDefinition envelope = MakeEnvelope("user@somecompany.com", "User Name", "",
                "", "15ffda8-5953-4e5f-b9d6-112133adf0e7");

            var envelopesApi = new EnvelopesApi(new ApiClient(config));
            EnvelopeSummary result = envelopesApi.CreateEnvelope(accountId, envelope);

但是,从那时起,我在运行代码时收到以下错误:

DocuSign.eSign.Client.ApiException:'调用CreateEnvelope时出错:{“ errorCode”:“ USER_AUTHENTICATION_FAILED”,“ message”:“用户名和密码中的一个或两个均无效。无效的访问令牌”}'

我从DocuSign获得了AuthenticateWithJWT()方法:

        public static (string accessToken, string accountId, string baseUri) AuthenticateWithJWT()
        {
            var apiClient = new ApiClient();
            string ik = ConfigurationManager.AppSettings["IntegrationKey"];
            string userId = ConfigurationManager.AppSettings["userId"];
            string authServer = ConfigurationManager.AppSettings["AuthServer"];
            string rsaKey = ConfigurationManager.AppSettings["RSAKey"];
            OAuth.OAuthToken authToken = apiClient.RequestJWTUserToken(ik,
                            userId,
                            authServer,
                            Encoding.UTF8.GetBytes(rsaKey),
                            1);

            string accessToken = authToken.access_token;
            apiClient.SetOAuthBasePath(authServer);
            OAuth.UserInfo userInfo = apiClient.GetUserInfo(authToken.access_token);
            Account acct = null;

            var accounts = userInfo.Accounts;
            {
                acct = accounts.FirstOrDefault(a => a.IsDefault == "true");
            }
            string accountId = acct.AccountId;
            string baseUri = acct.BaseUri + "/restapi";
            return (accessToken, accountId, baseUri);
        }

与以前一样,它正确返回了我的accountId,访问令牌和基本路径。
关于什么可能导致此错误,或者我可能采取什么步骤进一步解决此问题的任何想法?

2 个答案:

答案 0 :(得分:0)

我能够为此提出一个解决方案:

            var auth = DocuSign.eSignature.JWTAuth.AuthenticateWithJWT();
            string accessToken = auth.accessToken;
            string accountId = auth.accountId;
            string basePath = auth.baseUri;

            var apiClient = new ApiClient(basePath);
            apiClient.Configuration.DefaultHeader.Add("Authorization", "Bearer " + accessToken);

            EnvelopeDefinition envelope = MakeEnvelope("user@somecompany.com", "User Name", "",
                "", "15ffda8-5953-4e5f-b9d6-112133adf0e7");

            var envelopesApi = new EnvelopesApi(apiClient);
            EnvelopeSummary result = envelopesApi.CreateEnvelope(accountId, envelope);

您不再需要创建单独的配置对象。 您可以将basePath直接传递到ApiClient构造函数中。 新的apiClient实例具有Configuration属性,您可以在其中使用accessToken信息设置DefaultHeader。最后,您可以将已配置的apiClient实例传递给EnvelopesApi构造函数。

答案 1 :(得分:0)

可能意味着您遇到了错误的环境(即针对 Demo 端点的 Prod Key 或针对 Prod 端点的 Demo Key)。所以请确保 baseUri 对于您正在使用的访问令牌/密钥是正确的