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

Which is the error returned when a DocuSign refresh token is expired?

我的团队正在 ASP NET MVC 应用程序DocuSign 之间的集成,使用 Authorization Code Grant具有以下范围:signatureextended.

根据 documentation and this question,我知道 refresh_token 通常会在 30 天左右过期,但 可能会随时更改时间.

所以,因为我不确定 refresh_token 什么时候会过期(例如,所以我可以有一个经常性的工作来更新它),因为我有一个无效的 refresh_token 我需要等待大约 30 天才能看到它是哪个错误 returns,所以我可以处理它,我的问题是...

有谁知道尝试刷新 access_token 并且 refresh_token 已过期时返回的错误是什么?那会是无效授权吗?确切的错误代码标识符是什么returns所以我可以处理它?

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

由于您使用的是 extended 范围,因此每次使用刷新令牌获取一组新的{access and refresh代币}.

因此,如果您确保在达到 25 天时使用刷新令牌,那么您将永远是好的(除非用户同时撤回同意)。

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

如果刷新令牌在您尝试使用之前已过期,我相信您会收到 无效授权 错误。

只要您的应用在使用刷新令牌时出现问题,请要求您的用户重新进行身份验证。

我还不能使用过期的刷新令牌,但基于OAuth 2.0 RFC (Issuing an Access Token > Error Response)我坚信它会returninvalid_grant 对于过期的刷新令牌,一旦显示...

invalid_grant: The provided authorization grant or refresh token is invalid, expired, revoked...

而且我发现了这个 DocuSign REST API Guide, version 2 PDF(虽然它不是 v2.1),其中包含有关错误的信息 return 由 DocuSign OAuth2 端点编辑:

因此,根据这些信息以及与 @InbarGazit@LarryK 的讨论, 我的结论是。 ..

如果在尝试刷新 access_token (使用 refresh_token),而错误 returned 是那种可以通过重新验证来解决的错误,这似乎是那些:invalid_clientinvalid_grantunauthorized_client。代码示例:

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]
    }
}

此外,虽然我会尝试在acess_token快过期时刷新它,但我也会在使用它消费[=49=时检查USER_AUTHENTICATION_FAILED错误代码],如果发生这种情况,我将调用 刷​​新令牌逻辑 ,它已经处理了需要重定向用户的类型或错误(这是因为 access_token 可能无效但没有过期,我想这发生在例如从应用程序撤销访问权限时。