web-dev-qa-db-fra.com

Comment un jeton d'actualisation aide-t-il?

J'ai un doute fondamental ou je manque apparemment quelque chose de fondamental. Lorsque vous parlez d'une application Android qui parle au backend à l'aide d'API, l'accès aux ressources/API est protégé à l'aide de jetons d'accès et de jetons d'actualisation (un peu comme OAuth = 2,0).

D'après ce que je comprends, voici comment cela fonctionne:

  1. L'utilisateur ouvre l'application et fournit ses informations de connexion.
  2. L'application envoie une demande POST au serveur et le serveur émet un jeton d'accès (jeton aléatoire et non devinable) à l'application.
  3. L'application stocke ce jeton d'accès en toute sécurité sur le stockage local (sqlite db/préférences partagées, etc.) et utilise envoie ce jeton avec chaque autre appel d'API pour faire savoir au serveur qu'il est autorisé à accéder à la ressource.
  4. Maintenant, ce jeton d'accès a également une date d'expiration. De sorte que même si le jeton d'accès était compromis, la fenêtre d'attaque serait en quelque sorte petite.
  5. Maintenant, lorsque cela se produit, il faudrait que l'utilisateur loue ses informations de connexion et obtienne à nouveau un jeton d'accès autorisé, ce qui, au moins dans le cas des applications mobiles, est une mauvaise expérience utilisateur (non acceptable).
  6. Donc, pour résoudre ce problème, il y a un rafraîchissement du jeton qui est également émis vers l'application avec le jeton d'accès en premier lieu. Ce jeton d'actualisation est un jeton spécial à très longue durée de vie, qui garantit que dès que le jeton d'accès expire, il demande au serveur un nouveau jeton d'accès, supprimant ainsi la nécessité pour l'utilisateur de ressaisir ses identifiants de connexion pour récupérer un nouveau jeton d'accès autorisé.

Maintenant ma question est:

comment cela résout-il notre problème initial d'empêcher tout accès non autorisé aux API? À mon avis, cela le facilite davantage.

Si le jeton d'accès est compromis, il est fort probable que le jeton d'actualisation soit également compromis de la même manière, n'est-ce pas? Et parce que le jeton d'actualisation est un jeton à très longue durée de vie, l'attaquant pourrait l'utiliser (jusqu'à ce que le jeton d'actualisation n'expire pas) pour continuer à générer de nouveaux jetons d'accès autorisés. Est-ce exact ?

Veuillez m'aider à comprendre cela.

28
qre0ct

Le principal avantage d'un jeton d'actualisation est qu'il est plus facile de détecter s'il est compromis.

Considérez ces deux scénarios:

  1. Un seul jeton d'authentification longue durée est utilisé.
  2. Un jeton d'authentification de courte durée est utilisé et un jeton d'actualisation de longue durée demande périodiquement un nouveau jeton d'authentification une fois le précédent expiré.

Dans le scénario 1, si le jeton d'authentification est compromis, il serait difficile pour quiconque de le détecter, et l'accès non autorisé pourrait se poursuivre indéfiniment.

Dans le scénario 2, si seul le jeton d'authentification est compromis (le jeton d'actualisation n'est pas compromis lui aussi), il ne peut continuer que jusqu'à l'expiration du jeton.

Dans le scénario 2, si le jeton d'actualisation est compromis, une fois le jeton d'actualisation invoqué, tous les autres jetons d'authentification générés à l'aide de ce jeton d'actualisation sont invalidés, de sorte qu'une seule partie peut utiliser l'api (par jeton d'actualisation) à la fois. Il en résulte que plusieurs utilisateurs invalident à plusieurs reprises leurs jetons d'authentification respectifs en en générant de nouveaux. L'API pourrait détecter la violation car des rafraîchissements sont effectués avant l'expiration du jeton d'authentification, et saurait révoquer immédiatement le jeton de rafraîchissement.

23
TTT