DocuSign JWT 访问令牌无效
Posted
技术标签:
【中文标题】DocuSign JWT 访问令牌无效【英文标题】:DocuSign JWT Invalid Access Token 【发布时间】:2021-02-12 10:52:52 【问题描述】:我已在我的测试项目中将 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、访问令牌和基本路径。 关于可能导致此错误的原因或我可能会采取哪些步骤来进一步解决此问题的任何想法?
【问题讨论】:
【参考方案1】:我能够为此制定一个解决方案:
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 构造函数。
【讨论】:
【参考方案2】:可能意味着您遇到了错误的环境(即针对 Demo 端点的 Prod Key 或针对 Prod 端点的 Demo Key)。因此,请确保 baseUri 对于您正在使用的访问令牌/密钥是正确的
【讨论】:
以上是关于DocuSign JWT 访问令牌无效的主要内容,如果未能解决你的问题,请参考以下文章
使用刷新令牌时 Spring Boot JWT 令牌无效签名