Le lien vers la discussion, fournis par Catchdave, a un autre point de Dick Hardt, qui, je crois, mérite d'être mentionné ici, en plus de ce qui a été écrit ci-dessus:
Mon souvenir de l'actualisation des jetons était pour la sécurité et la révocation.
<...>
révocation: si le jeton d'accès est autonome, l'autorisation peut être révoquée par la non-délivrance de nouveaux jetons d'accès. Une ressource n'a pas besoin d'interroger le serveur d'autorisation pour voir si le jeton d'accès est valide.Cela simplifie l'accès jeton de validation et le rend plus facile à l'échelle et prendre en charge plusieurs serveurs d'autorisation. Il y a une fenêtre de temps où un jeton d'accès est valide, mais l'autorisation est révoquée.
En effet, dans la situation où les Ressources Serveur et le Serveur d'Autorisation de la même entité, et où la connexion entre l'utilisateur et l'un d'eux est (généralement) au même niveau de sécurité, il n'y a pas beaucoup de sens de garder le jeton d'actualisation séparé du jeton d'accès.
Bien que, comme mentionné dans le devis, un autre rôle de l'actualisation des jetons est d'assurer le jeton d'accès peut être révoquée à tout moment par l'Utilisateur (via l'interface web, dans leurs profils, par exemple) tout en conservant un système évolutif dans le même temps.
Généralement, les jetons peuvent être aléatoires identificateurs pointant vers le dossier dans le Serveur de base de données, ou ils peuvent contenir toutes les informations en elles-mêmes (certes, cette information doit être signé, avec MAC, par exemple).
Comment le système avec la longue durée de vie des jetons d'accès devrait fonctionner
Serveur permet au Client d'obtenir l'accès aux données de l'Utilisateur à l'intérieur d'un ensemble pré-défini des étendues par l'émission d'un jeton. Comme nous voulons garder le jeton révocable, il faut stocker dans la base de données le jeton avec le drapeau "révoqué" ou unset (sinon, comment voulez-vous faire avec l'auto-contenue jeton?) Base de données peut contenir autant que len(users) x len(registered clients) x len(scopes combination)
des dossiers. Chaque demande d'API doit alors frapper la base de données. Bien qu'il est assez trivial de faire des requêtes de base de données tels que l'exécution O(1), le point de défaillance unique lui-même peut avoir un impact négatif sur l'évolutivité et les performances du système.
Comment le système avec la longue durée de vie jeton d'actualisation et de courte durée jeton d'accès devrait fonctionner
Ici, nous émettons deux clés: aléatoire actualiser jeton avec l'enregistrement correspondant dans la base de données, et signé autonome jeton d'accès, contenant entre autres l'expiration champ d'horodatage.
Comme le jeton d'accès est indépendant, nous n'avons pas de frapper la base de données pour vérifier sa validité. Tout ce que nous avons à faire est de décoder le jeton et de valider la signature et l'horodatage.
Néanmoins, nous avons encore de garder la base de données de l'actualisation des jetons, mais le nombre de demandes à cette base de données est généralement défini par la durée de vie du jeton d'accès (plus la durée de vie, moins le taux d'accès).
Afin de révoquer l'accès d'un Client à partir d'un Utilisateur en particulier, nous devons marquer la mise à jour jeton comme "révoqué" (ou l'enlever complètement) et d'arrêter l'émission de nouveaux jetons d'accès. Il est évident qu'il y a une fenêtre, lorsque l'accès est déjà révoqué, mais certains jetons d'accès peut encore avoir accès aux données de l'utilisateur.
Compromis
Actualisation des jetons d'éliminer en partie les SPoF de Jeton d'Accès de base de données, mais ils ont quelques inconvénients évidents.
La "fenêtre". Un délai entre les événements de l'utilisateur "révoque l'accès" et "l'accès est garanti d'être révoqué".
-
La complexité de la logique Client.
sans jeton d'actualisation
- envoyer la demande d'API avec jeton d'accès
- si le jeton d'accès n'est pas valide, ne parviennent pas, et demander à l'utilisateur de s'authentifier à nouveau
avec jeton d'actualisation
- envoyer la demande d'API avec jeton d'accès
- Si le jeton d'accès n'est pas valide, essayez de mettre à jour à l'aide jeton d'actualisation
- si l'actualisation de la demande de passe, mise à jour le jeton d'accès et l'envoyer à nouveau la première demande d'API
- Si l'actualisation de la requête échoue, demander à l'utilisateur de s'authentifier à nouveau
J'espère que cette réponse ne fait sens et contribue à quelqu'un de faire plus de décision réfléchie. Je tiens à noter également que certains bien connus OAuth2 fournisseurs, y compris github et foursquare adopter le protocole sans actualisation des jetons, et semblent heureux.