Mon application mobile iOS utilise des services implémentés avec le protocole OAuth2.0. Le jeton d'accès OAuth est accompagné d'un jeton d'actualisation et d'un expires_in
champ. J'ai enregistré le jeton d'actualisation et le délai d'expiration du jeton dans mon application, mais je ne sais pas quand les utiliser.
expires_in
?Voici des informations sur OAuth 2.0 actualisation du jeton.
Expire dans la définition
Le standard OAuth 2.0, RFC 6749 , définit le champ expires_in
Comme le nombre de secondes à expiration:
expires_in: RECOMMANDÉ. La durée de vie en secondes du jeton d'accès. Par exemple, la valeur "3600" indique que le jeton d'accès expirera dans une heure à partir du moment où la réponse a été générée. S'il est omis, le serveur d'autorisation DEVRAIT fournir le délai d'expiration par d'autres moyens ou documenter la valeur par défaut.
Gestion de l'actualisation des jetons: méthode 1
Après avoir reçu une valeur access_token
, expires_in
, refresh_token
, Etc. valide, etc., les clients peuvent traiter cela en stockant une heure d'expiration et en la vérifiant à chaque demande. Cela peut être fait en utilisant les étapes suivantes:
expires_in
en un délai d'expiration (Epoch, date/heure RFC-3339/ISO-8601, etc.)access_token
a expiréUn exemple d'implémentation est la bibliothèque Go oauth2
Qui convertit convertit la valeur expires_in
En une date-heure RFC 3339 dans le Token propriété expiry
. expiry
n'est pas défini par la norme OAuth 2.0 mais est utile ici.
Lors de la vérification de l'heure, assurez-vous que vous êtes en même temps, par exemple, en utilisant le même fuseau horaire en convertissant toutes les heures en fuseau horaire ou UTC.
En plus de recevoir un nouveau access_token
, Vous pouvez recevoir un nouveau refresh_token
Avec un délai d'expiration dans le futur. Si vous recevez cela, vous devez stocker le nouveau refresh_token
Pour prolonger la durée de votre session.
Gestion de l'actualisation des jetons: méthode 2
Une autre méthode de gestion de l'actualisation du jeton consiste à actualiser manuellement après avoir reçu une erreur de jeton non valide. Cela peut être fait avec l'approche précédente ou par lui-même.
Si vous essayez d'utiliser un access_token
Expiré et que vous obtenez une erreur de jeton non valide, vous devez effectuer une actualisation du jeton (si votre jeton d'actualisation est toujours valide). Étant donné que différents services peuvent utiliser différents codes d'erreur pour les jetons expirés, vous pouvez soit garder une trace du code pour chaque service, soit un moyen simple d'actualiser les jetons entre les services consiste à simplement essayer une seule actualisation en cas d'erreur 4xx.
Erreurs de jeton d'accès non valides
Voici quelques codes d'erreur des services populaires:
Actualisation de l'expiration du jeton
Si votre refresh_token
A également expiré, vous devrez recommencer le processus d'autorisation.
La spécification OAuth 2. ne définit pas l'expiration du jeton d'actualisation ni comment la gérer, cependant, un certain nombre d'API renverra une propriété refresh_token_expires_in
Lorsque le jeton d'actualisation expirera. Différentes API gèrent différemment l'expiration du jeton d'actualisation, il est donc important d'examiner les documents par API, mais généralement vous pouvez recevoir un nouveau jeton d'actualisation lorsque vous actualisez votre jeton d'accès. L'expiration doit être gérée de la même manière, par exemple en convertissant refresh_token_expires_in
En une valeur date-heure RFC 3339 refresh_token_expiry
.
Quelques exemples incluent LinkedIn , eBay et RingCentral . Dans l'API LinkedIn, lorsque vous actualisez les jetons d'accès, vous recevrez un jeton d'actualisation avec une propriété refresh_token_expires_in
Décroissante ciblant le délai d'expiration du jeton d'actualisation d'origine jusqu'à ce que vous deviez vous authentifier à nouveau. L'API RingCentral renverra les jetons d'actualisation avec un temps statique afin que l'utilisateur n'ait pas à authentifier à nouveau si l'actualisation des jetons et les mises à jour des jetons d'actualisation sont effectuées de manière cohérente.
Recommande la méthode 2 ci-dessus car un 401 peut se produire pour plusieurs raisons telles que le renouvellement d'un certificat de signature de jeton ou des différences d'horloge:
J'ai implémenté beaucoup de clients OAuth réussis et j'ai toujours utilisé cette technique - et évité de lire le champ expires_in dans mon code côté client