c# - DocuSign JWT 模拟问题
问题描述
我正在研究此处和此处记录的 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 调用都返回200
s 和数据,这些数据的形状与我预期的一样。
问题
问题是我实际上无法从最后一步成功使用该令牌作为我的应用程序所模拟的用户执行进一步的操作。(我确保将base_url
用于关联用户。)当我GET
从建议的端点(brands
)请求 a 时,我收到了这个回复:
{
"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
来自模拟调用。
我还尝试向其他几个顶级用户/帐户端点发送类似的请求,并且都收到了相同或类似的错误。
我在这里想念什么?
解决方案
如果 Auth Code Grant 和 JWT,您的流程是混合的。您正在使用两者。
步骤 3 中的令牌应该可以工作(但您可以省略“模拟”,因为 Auth Code Grant 不需要它)。
令牌在 8 小时后过期。这可能是您错误的原因。您需要获得一个新的。
推荐阅读
- javascript - 如何使用 JavaScript 解析 JSON 格式的数据?
- asp.net-core - Entity Framework Core 存储来自多个数据源的多对多关系
- asp.net-mvc - 将 Web 应用程序 (MVC) 发布到 Azure(蓝屏)
- iframe - 在 iframe 中制作内容以适应 Mobile 中的视口
- java - 如何在 Eclipse Milo OpcUa 服务器上正确编写 ExtensionObject 数组?
- django - Django显示错误,如“导入错误没有名为redis的模块”
- reactjs - 反应路由器:类型中缺少“历史”
- php - 替换 HTML 中的内容
使用 php 具有特定语言字符的标签
- c++ - 访问具有单态的变体
- php - 使用 add_row 以编程方式将条目添加到 wordpress 高级自定义字段中的灵活内容字段