DocuSign 刷新令牌过期时返回的错误是什么?
Which is the error returned when a DocuSign refresh token is expired?
我的团队正在 ASP NET MVC 应用程序 和 DocuSign 之间的集成,使用 Authorization Code Grant具有以下范围:signature
和 extended
.
根据 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_client
、invalid_grant
和unauthorized_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
可能无效但没有过期,我想这发生在例如从应用程序撤销访问权限时。
我的团队正在 ASP NET MVC 应用程序 和 DocuSign 之间的集成,使用 Authorization Code Grant具有以下范围:signature
和 extended
.
根据 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_client
、invalid_grant
和unauthorized_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
可能无效但没有过期,我想这发生在例如从应用程序撤销访问权限时。