3 Réponses :


1
votes

Je vous recommanderais de ne pas faire des hypothèses sur les messages d'erreur et les conditions dans lesquelles vous les obtenez. Pour résoudre ce problème, je voudrais implémenter le code qui tente d'utiliser le jeton d'actualisation lorsque votre jeton d'accès d'origine ne fonctionne pas (erreur) et tente de demander à l'utilisateur de recommencer le processus de connexion lorsque le jeton de rafraîchissement ne fonctionne pas (erreur). La raison (expiré, mot de passe modifié, l'accès a révoqué ou même un autre bug) n'a pas d'importance. Par exemple, si la raison est que le consentement à l'application a été révoqué - le processus de subvention de code d'autorisation demanderait à l'utilisateur le consentement à nouveau. Donc, de cette façon - vous gérez tout sans avoir à avoir un code spécial pour chaque cas. Enfin, ce sont des messages d'erreur possibles changeront et même la logique pour lesquelles vous les obtiendrez peut changer pour toutes sortes de raisons. Les applications robustes gèrent toutes les erreurs correctement.


6 commentaires

Merci @inbargazit, mais cela ne me semble pas pour moi qui gère une éventuelle erreur en demandant à l'utilisateur le consentement à nouveau est une bonne approche non plus. Imaginez, par exemple, on a foiré avec les configurations de l'application utilisées dans l'intégration (bien que cela soit improbable et idéalement, cela ne devrait pas arriver, il serait peut-être demandé), l'utilisateur serait invité à consentir des autorisations, mais cela ne résoudrait pas le problème. J'accepte de couvrir plus de scénarios que de "rafraîchir le jeton expiré" , mais il devrait y avoir un moyen pour moi d'identifier si les erreurs que je reçois seraient vraiment résolues en consentant à l'application.


Le consentement n'est requis qu'une fois, je viens de donner cela comme exemple. Ce que je veux dire, c'est de ré-authentifier l'utilisateur. C'est juste une bonne pratique pour le faire de temps en temps.


J'ai mentionné consentement mais je sais que ce n'est requis qu'une fois, à moins que je ne change que les étanches utilisées ou que l'utilisateur a révoqué l'accès à l'application. Mais mon point est ... Je ne pense pas à demander à l'utilisateur de ré-authentifier lorsque Toute erreur se produit est une bonne approche, car il pourrait y avoir des erreurs où il ne suffirait pas de ré-authentifier ne résoudrait pas cette. Je peux aller de cette façon si je ne peux pas connaître les erreurs éventuelles pour les gérer, bien que je ne voudrais pas.


Oui, vous avez raison, des erreurs (disent que votre secret de client est erroné) ne sera pas aidé, mais ce sont toutes des erreurs à votre extrémité, pas l'utilisateur, pas les erreurs normales / attendues qui peuvent se produire au cours de l'utilisation d'une API. .


C'est pourquoi je préférerais rediriger l'utilisateur à la page de connexion uniquement lorsqu'un ensemble d'erreurs se produisent et non avec aucune erreur. J'ai trouvé ce Guide API de repos Docusign, version 2 pdf (althoug ce n'est pas v2.1), où le sujet OAUTH2 codes de réponse répertorie les codes d'erreur possibles, je suppose donc que je peux baser sur eux pour rediriger l'utilisateur (rediriger probablement l'utilisateur Lorsque l'erreur est l'une de ces: [ invalid_client , invalid_grant , non autorisé_client , non supporté_gant_type ], mais pas celui-ci : invalid_request ).


ça ma l'air bon



1
votes

Puisque vous utilisez la portée étendue , vous obtiendrez un nouveau jeton de rafraîchissement (bon pour 30 jours supplémentaires) à chaque fois que vous utilisez le jeton d'actualisation pour obtenir un nouvel ensemble de {Accès et Actualiser les jetons}.

Donc, si vous vous assurez d'utiliser le jeton de rafraîchissement chaque fois que cela atteint 25 jours, vous serez toujours bon (à moins que l'utilisateur ait retiré le consentement entre).

Bien sûr, si votre application utilise l'API docusign chaque jour, le jeton de rafraîchissement ne sera jamais plus d'une journée.

Je pense que vous obtiendrez une erreur invalide si le jeton de rafraîchissement a expiré avant d'essayer de l'utiliser.

Chaque fois que votre application ait un problème à l'aide du jeton Actualiser, demandez à votre utilisateur de ré-authentifier.



-1
votes

Je n'ai pas encore été en mesure d'utiliser un jeton d'actualisation expiré em>, mais basé sur OAuth 2.0 RFC (émettant un jeton d'accès> Réponse des erreurs) Je crois fermement que cela retournera invalid_grant code> pour les jetons d'actualisation expirés, une fois qu'il est indiqué ...

invalid_grant CODE>: La subvention d'autorisation fournie ou Actualiser le jeton strong> est invalide, expiré, révoqué ... p> blockQuote>

Et j'ai trouvé ce API Docusign Repose Guide, version 2 PDF (bien que ce ne soit pas v2.1) avec des informations sur les erreurs retournées par Docusign Oauth2 Docteurs: P>

 Guide de l'API de repos Docusign P> blockQuote>

Donc, basé sur ces informations et les discussions avec @inbargazit em> et @larryk em>, ma conclusion est ... strong> P>

Je vais Redirection Strort> L'utilisateur à la page d'authentification lorsqu'une erreur se produit pendant que essaye d'actualiser fort> le Access_Token code> (en utilisant Le rafraîchissez_token code>) et l'erreur renvoyée est le type d'erreur qui pourrait être résolu en ré-authentifiant, ce qui semble être ceux: invalid_client code>, invalid_grant Code> et non autorisé_client code>. Échantillon de code: p>

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


2 commentaires

Cette documentation a été tirée du Centre de développeur car elle fait référence à une mise en œuvre plus ancienne de OAuth qui est obsolète et n'est plus supportée. Les codes d'erreur que vous voyez ici ne sont pas une correspondance exacte pour ce que vous verrez si vous utilisez le serveur de compte docusign ( compte.docusign.com ) pour l'authentification.


Merci de me laisser savoir @ auvoir!