Question

Je dois avouer que j'ai eu cette question depuis très longtemps, jamais vraiment compris.

Dites à Auth Token, c'est comme une clé d'un coffre-fort, quand il expire, il n'est plus utilisable.Maintenant, nous avons reçu un jeton de rafraîchissement magique, qui peut être utilisé pour obtenir une autre clé utilisable et une autre ... jusqu'à expiration de la clé Magic.Alors, pourquoi ne pas simplement définir l'expiration du jeton d'authentification comme la même chose que de rafraîchir le jeton?Pourquoi déranger du tout?

Quelle est la raison valide pour cela, peut-être un historique?vraiment envie de savoir.merci

Était-ce utile?

La solution

La réponse référencée (via @anders) est utile, il indique:

En cas de compromis, la fenêtre de temps qu'il est valable est limitée, mais Les jetons sont utilisés sur SSL, il est donc peu probable que cela soit compromis.

Je pense que la partie importante est que les jetons d'accès seront souvent enregistrés (surtout lorsqu'ils sont utilisés comme paramètre de requête, ce qui est utile pour JSONP), il est donc préférable d'être de courte durée.

Il y a quelques raisons supplémentaires, avec des implémentations à grande échelle de OAuth 2.0 par les fournisseurs de services:

  1. Les serveurs API peuvent valider en toute sécurité les jetons d'accès sans recherches de dB ou appels RPC s'il est correct de ne pas vous inquiéter de la révocation. Cela peut avoir de forts avantages de performance et réduire la complexité des serveurs API. Mieux si vous allez bien avec une révocation de jeton prenant 30m-60m (ou quelle que soit la longueur du jeton d'accès). Bien sûr, les serveurs API pourraient également conserver une liste de jetons dans la mémoire révoquée également dans la dernière heure.

  2. Depuis que les jetons peuvent avoir plusieurs étendues avec accès à plusieurs services d'API différents, la possibilité de recevoir des jetons d'accès de courte durée empêchant un développeur d'un service d'API pour obtenir un accès à la vie à des données d'un utilisateur sur le service API B. La compartimentation est bonne pour Sécurité.

Autres conseils

Je lisais un Article L'autre jour de Taiser Joudeh et je le trouve très utile, il a déclaré:

À ma propre opinion, il existe trois avantages principaux pour utiliser des jetons d'actualisation qu'ils sont:

  1. Mise à jour du contenu du jeton d'accès: Comme vous le savez que les jetons d'accès sont des jetons autonomes, elles contiennent toutes les revendications (informations) sur l'utilisateur authentifié une fois qu'ils sont générés, maintenant si nous émettons un jeton de longue durée (1 mois Par exemple) Pour un utilisateur nommé "Alex" et l'inscriva dans le rôle "Utilisateurs", ces informations sont contenues sur le jeton que le serveur d'autorisation généré. Si vous avez décidé plus tard (2 jours après avoir obtenu le jeton) pour le ajouter au rôle "admin", il n'ya aucun moyen de mettre à jour ces informations contenues dans le jeton générées, vous devez lui demander de vous authentifier à nouveau de soi-même. Donc, le serveur d'autorisation ajoutez ces informations à ce jeton d'accès nouvellement généré, ce qui n'est pas réalisable sur la plupart des cas. Vous ne pourrez peut-être pas atteindre les utilisateurs qui ont obtenu des jetons d'accès à vie longue. Donc, pour surmonter ce problème, nous devons émettre des jetons d'accès à courte durée (30 minutes par exemple) et utiliser le jeton de rafraîchissement pour obtenir un nouveau jeton d'accès, une fois que vous avez obtenu le nouveau jeton d'accès, le serveur d'autorisation sera en mesure d'ajouter une nouvelle demande d'utilisateur. "Alex" qui lui attribue au rôle "admin" une fois que le nouveau jeton d'accès généré

  2. ACCÈS REVOKING des utilisateurs authentifiés: Une fois que l'utilisateur obtient un jeton d'accès à long habitude, il sera capable d'accéder aux ressources du serveur tant que son jeton d'accès n'est pas expiré, il n'y a pas de moyen standard de révoquer des jetons d'accès sauf si Le serveur d'autorisation implémente la logique personnalisée qui vous oblige à stocker un jeton d'accès généré dans la base de données et effectuez des contrôles de base de données avec chaque demande. Mais avec des jetons d'actualisation, un administrateur système peut révoquer l'accès en supprimant simplement l'identifiant de jeton d'actualisation de la base de données, une fois que le système demande un nouveau jeton d'accès à l'aide du jeton de rafraîchissement supprimé, le serveur d'autorisation rejetera cette demande car le jeton de rafraîchissement n'est plus disponible. (Nous allons entrer dans cette question avec plus de détails).

  3. Pas besoin de stocker ou de demander le nom d'utilisateur et le mot de passe: Utilisation des jetons d'actualisation Vous permet de demander à l'utilisateur son nom d'utilisateur et son mot de passe une seule fois une fois qu'il authentifie pour la première fois, le serveur d'autorisation peut émettre de très longtemps vécu. Actualiser le jeton (1 an par exemple) et l'utilisateur restera connecté toute cette période à moins que le système Admin n'essaie de révoquer le jeton de rafraîchissement. Vous pouvez penser à cela comme un moyen de faire l'accès hors ligne aux ressources du serveur, cela peut être utile si vous construisez une API qui sera consommée par l'application frontale où il n'est pas possible de continuer à demander un nom d'utilisateur / mot de passe fréquemment.

Je voudrais ajouter à cette autre perspective.

Authentification apatride sans frapper la DB sur chaque demande

Supposons que vous souhaitiez créer un mécanisme de sécurité apatride (sans session) qui puisse faire une authentification de millions d'utilisateurs, sans avoir à faire appel à une base de données pour effectuer l'authentification. Avec tout le trafic que votre application reçoit, la sauvegarde d'un appel de DB sur chaque demande vaut beaucoup! Et il doit être apatride afin qu'il puisse être facilement regroupé et axé sur des centaines, voire des milliers de serveurs.

Avec des sessions à l'ancienne, l'utilisateur se connecte, à quel point nous lisons leurs informations utilisateur à partir de la base de données. Pour éviter de le lire à nouveau et encore, nous le stockons dans une session (généralement en mémoire ou dans un cache en cluster). Nous envoyons l'ID de session au client dans un cookie, qui est joint à toutes les demandes suivantes. Sur les demandes suivantes, nous utilisons l'ID de session pour rechercher la session, qui contient à son tour les informations utilisateur.

Mettez les informations utilisateur directement dans le jeton d'accès

Mais nous ne voulons pas de sessions. Donc, au lieu de stocker les informations utilisateur dans la session, mettons-le simplement dans un jeton d'accès. Nous signons le jeton afin que personne ne puisse altérer avec elle et presto. Nous pouvons authentifier des demandes sans session et sans avoir à rechercher les informations utilisateur de la DB pour chaque demande.

Aucune session ... aucun moyen d'interdire les utilisateurs?

Mais ne pas avoir une session a un gros inconvénient. Et si cet utilisateur est banni par exemple? Dans le vieux scénario, nous supprimons simplement sa session. Il doit ensuite se connecter à nouveau, ce qu'il ne pourra pas faire. Interdiction terminée. Mais dans le nouveau scénario, il n'y a pas de session. Alors, comment pouvons-nous l'interdire? Nous devrions lui demander (très poliment) de supprimer son jeton d'accès. Vérifiez chaque demande entrante contre une liste d'interdiction? Oui, fonctionnerait, mais nous devons maintenant faire appel à cet appel de dB que nous ne voulons pas.

compromis avec des jetons de courte durée

Si nous pensons qu'il est acceptable qu'un utilisateur puisse toujours pouvoir utiliser son compte pour, disons, 10 minutes après avoir été interdit, nous pouvons créer une situation qui est un compromis entre la vérification de la DB chaque requête et uniquement sur la connexion. Et c'est là que les jetons d'actualisation sont entrés. Ils nous permettent d'utiliser un mécanisme apatride avec des jetons d'accès à courte durée. Nous ne pouvons pas révoquer ces jetons car aucune vérification de la base de données n'est effectuée pour eux. Nous vérifions seulement leur date d'expiration contre l'heure actuelle. Mais une fois expirant, l'utilisateur devra fournir le jeton de rafraîchissement pour obtenir un nouveau jeton d'accès. À ce stade, nous vérifions la DB et voyons que l'utilisateur a été interdit. Nous nions donc la demande de jeton d'accès et l'interdiction prend effet.

Shortes Réponse possible:

Les jetons de rafraîchissement permettent des temps de décomposition des jetons scopés / différents. Les jetons de ressources réels sont courts, tandis que le jeton de rafraîchissement peut rester valable pendant des années (applications mobiles).Cela vient avec une meilleure sécurité (les jetons de ressources ne doivent pas nécessairement être protégés) et la performance (seule l'API de rafraîchissement de la jeton doit vérifier la validité contre la DB).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top