【发布时间】:2021-02-02 00:30:34
【问题描述】:
我正在处理记录在 here 和 here 的 JWT 模拟流程。我正在使用 C#,虽然我已经完成了一些快速启动应用程序,但我仍然遇到了一些问题。
现有流程
到目前为止,我的流程似乎在 DS sandbox/dev/demo 中可以使用,是:
- 将用户发送到 DocuSign (
oauth/auth)。scope是"signature impersonation"。 (我也尝试过添加更多权限。) - 在 DS 身份验证和模拟授权后,用户在我的网络应用程序上显示一个授权码
- 获取该授权码并将其发布到
oauth/token,以便为我的目标用户获取访问令牌 - 获取该访问令牌并调用
oauth/userinfo以获取目标用户的 ID 和 URL - 创建一个 JWT,使用我的 Web 应用和 DS 之间的共享密钥对进行签名,并将其发布到
oauth/token。收到带有看起来不错的令牌的200响应。
到目前为止,这一切似乎都正常工作:所有 DS 调用都返回 200s 和我预期的数据。
问题
问题是我实际上无法从最后一步成功使用该令牌作为我的应用所模拟的用户执行进一步的操作。 (我确保为关联用户使用 base_url。)当我从建议的端点 (brands) 请求 GET 时,我收到了回复:
{
"errorCode": "AUTHORIZATION_INVALID_TOKEN",
"message": "The access token provided is expired, revoked or malformed. Authentication for System Application failed."
}
提供授权令牌的响应在数千秒内包含一个 expires_in 值,我正在我的 Web 应用程序中串行执行所有这些请求。因此,此时到期或撤销应该是不可能的。我也根本没有碰过令牌,所以我希望它是正确的。
这是我用来发布到该端点的代码,如果有用的话:
private async Task<IgnoreMe> GetBrands(UserInfoAccount account, AccessTokenResponse accessToken)
{
var client = _clientFactory.CreateClient("docusign");
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri($"{account.BaseUri}/restapi/v2.1/accounts/{account.Id}/brands"),
};
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken.AccessToken!);
var response = await client.SendAsync(request);
if (!response.IsSuccessStatusCode)
{
return IgnoreMe.Fail;
}
return IgnoreMe.Succeed;
}
此方法的参数是从以前的 API 调用返回的值:AccessTokenResponse 来自模拟调用。
我也尝试向其他几个顶级用户/帐户端点发送类似的请求,但都收到了相同或类似的错误。
我在这里错过了什么?
【问题讨论】:
-
您可以将此令牌与任何其他端点一起使用吗?
-
没有,我试过好几次了
-
第 3 步中的令牌呢?你试过那个令牌吗?您不需要使用 JWT 以及 Auth Code Grant。您需要/或
标签: c# docusignapi