Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docusignapi DocuSign刷新令牌过期时返回的错误是什么?_Docusignapi - Fatal编程技术网

Docusignapi DocuSign刷新令牌过期时返回的错误是什么?

Docusignapi DocuSign刷新令牌过期时返回的错误是什么?,docusignapi,Docusignapi,我的团队正在进行ASP NET MVC应用程序和DocuSign之间的集成,使用以下范围:签名和扩展 根据和,我知道刷新\u令牌通常在30天左右过期,但它可能随时发生变化 因此,由于我无法确定刷新\u令牌何时过期(例如,我可以有一个重复的作业来更新它),而且由于我拥有一个无效的刷新\u令牌我必须等待大约30天才能看到它返回哪个错误,所以我可以处理它,我的问题是 有人知道在尝试刷新access\u令牌时返回的错误是什么,并且refresh\u令牌已过期吗?那是无效的赠款吗?它返回什么样的准确错误代

我的团队正在进行ASP NET MVC应用程序DocuSign之间的集成,使用以下范围:
签名
扩展

根据和,我知道
刷新\u令牌通常在30天左右过期,但它可能随时发生变化

因此,由于我无法确定
刷新\u令牌
何时过期(例如,我可以有一个重复的作业来更新它),而且由于我拥有一个无效的
刷新\u令牌
我必须等待大约30天才能看到它返回哪个错误,所以我可以处理它,我的问题是


有人知道在尝试刷新
access\u令牌
时返回的错误是什么,并且
refresh\u令牌
已过期吗?那是无效的赠款吗?它返回什么样的准确错误代码或标识符,以便我可以处理它?

我建议您不要对错误消息和获取错误消息的条件进行假设。为了解决这个问题,我将实现以下代码:当原始访问令牌不工作时,尝试使用刷新令牌(错误),当刷新令牌不工作时,尝试要求用户重新启动登录过程(错误)。 原因(过期、修改密码、撤销访问权限或其他错误)并不重要。例如,如果原因是对应用程序的同意被撤销-授权代码授予过程将再次请求用户同意。这样,您就可以处理所有问题,而不必为每种情况编写特殊代码。
最后,错误消息可能会发生变化,甚至您获取错误消息的逻辑也可能因各种原因而发生变化。健壮的应用程序可以正确地处理所有错误。

因为您使用的是
扩展的
范围,所以每次使用刷新令牌获取一组新的{access and refresh tokens}时,您都会得到一个新的刷新令牌(有效期再延长30天)

因此,如果您确保在刷新令牌出现25天时就使用它,那么您将始终保持良好状态(除非用户同时撤回了同意)

当然,如果您的应用程序每天都使用DocuSign API,那么刷新令牌将不会超过一天

我相信如果刷新令牌在您尝试使用它之前已过期,您将获得无效的授权错误


任何时候你的应用程序在使用刷新令牌时出现问题,请让你的用户重新验证。

我还不能使用过期的刷新令牌,但根据我的判断,我坚信它会对过期的刷新令牌返回
无效的\u grant
,一旦它说

无效\u授权
:提供的授权授权或刷新令牌无效、过期、已吊销

我发现这个PDF(虽然它不是v2.1)包含关于DocuSign OAuth2端点返回的错误的信息:

因此,基于这些信息以及与@InbarGazit和@LarryK的讨论,我的结论是……

尝试刷新
访问\u令牌
(使用
刷新\u令牌
)时出现错误时,我将将用户重定向到身份验证页面,返回的错误是可以通过重新验证解决的错误类型,似乎是:
无效的\u客户端
无效的授权
未经授权的客户端
。代码示例:

var redirectUserErrors = new[] { "invalid_client", "invalid_grant", "unauthorized_client" };
// [...]
var result = await httpClient.PostAsync(oAuthUri, data);
var stringContent = await result.Content.ReadAsStringAsync();

if (!result.IsSuccessStatusCode)
{
    var errorObject = JObject.Parse(stringContent);
    string errorCode = errorObject["error"] != null ? errorObject["error"].ToString() : null;

    if (!string.IsNullOrEmpty(errorCode) && 
        redirectUserErrors.Any(err => err.Equals(errorCode, StringComparison.InvariantCultureIgnoreCase)))
    {
       throw new DocuSignAuthRedirectException($"An error has occurred when trying to refresh the access token. Error code: '{errorCode}'");
       // [The custom exception needs to be handled outside, so the User can be redirected to the Auth page]
    }
}

此外,尽管我会在
acesss\u令牌即将过期时尝试刷新它,但在使用它来使用API时,我也会检查
USER\u AUTHENTICATION\u FAILED
错误代码,如果出现这种情况,我会调用刷新令牌逻辑,它已经处理了需要重定向用户的类型或错误(这是因为
access\u令牌
可能无效但未过期,例如,我认为当从应用程序中撤销访问时会发生这种情况).

谢谢@InbarGazit,但对我来说,通过再次征求用户同意来处理任何可能的错误似乎也不是一个好办法。例如,想象一下,有人把集成中使用的应用程序配置搞砸了(虽然这不太可能,理想情况下也不应该发生,但可能发生),将要求用户同意权限,但这并不能解决问题。我同意涵盖更多的场景,而不仅仅是“刷新令牌过期”,但我应该有办法确定我收到的错误是否真的可以通过再次同意该应用程序来解决。同意只需要一次,我只是举了一个例子。我的意思是重新验证用户。这只是偶尔做一次的好做法。我提到过同意,但我知道只需要一次,除非我更改正在使用的作用域或用户撤销对应用程序的访问。但我的观点是……我不认为在出现任何错误时要求用户重新验证是一种好方法,因为可能存在一些错误,而仅仅重新验证无法解决这一问题。如果我不知道可能出现的错误,我可能会这样做,尽管我会这样做是的,你是对的,有些错误(比如说你的客户秘密是错的)不会有帮助,但这些都是您端的错误,而不是用户,也不是在使用API过程中可能发生的正常/预期错误。听起来像planThanks@Larry…我还认为使用刷新令牌的错误将返回无效的授权,但到目前为止,我想我需要等待30天才能确定。我的应用程序取决于用户决定是否使用使用DocuSign,这意味着通过我们的应用程序,用户可以发送要签名的文档(信封)。因此,我无法确保用户会经常使用它来不断更新令牌。我可以在30天之前定期更新令牌,但因为文档上说“它将在30天左右过期,但随时可能更改”,我对此感到不舒服