Quelle est la différence entre l'authentification par jeton et l'authentification à l'aide de cookies?
J'essaie d'implémenter la démo Ember Auth Rails mais je ne comprends pas les raisons de l'utilisation de l'authentification par jeton comme décrit dans la FAQ Ember Auth sur la question «Pourquoi l'authentification par jeton?»
Réponses:
Une application Web typique est principalement sans état , en raison de sa nature de demande / réponse . Le protocole HTTP est le meilleur exemple de protocole sans état . Mais comme la plupart des applications Web ont besoin d'un état , afin de conserver l' état , entre le serveur et le client, les cookies sont utilisés de telle sorte que le serveur puisse renvoyer chaque réponse au client. Cela signifie que la prochaine demande faite par le client inclura ce cookie et sera donc reconnue par le serveur. De cette façon, le serveur peut maintenir une session avec le client sans état , sachant presque tout sur l' état de l'application , mais stocké sur le serveur. Dans ce scénario, à aucun moment le client ne tientstate , ce qui n'est pas ainsi que fonctionne Ember.js
Dans Ember.js, les choses sont différentes. Ember.js facilite le travail du programmeur car il contient en effet l' état pour vous, dans le client, en sachant à chaque instant son état sans avoir à faire une requête au serveur demandant des données d' état .
Cependant, la conservation de l' état dans le client peut également parfois introduire des problèmes de concurrence qui ne sont tout simplement pas présents dans les situations sans état . Cependant, Ember.js traite également ces problèmes pour vous, en particulier les données de braise sont construites dans cet esprit. En conclusion, Ember.js est un framework conçu pour les clients avec état .
Ember.js ne fonctionne pas comme une application Web sans état typique où la session , l' état et les cookies correspondants sont gérés presque entièrement par le serveur. Ember.js conserve son état complètement en javascript (dans la mémoire du client, et non dans le DOM comme certains autres frameworks) et n'a pas besoin du serveur pour gérer la session. Cela se traduit par Ember.js plus polyvalent dans de nombreuses situations, par exemple lorsque votre application est en mode hors ligne.
Évidemment, pour des raisons de sécurité, il a besoin d'une sorte de jeton ou de clé unique à envoyer au serveur chaque fois qu'une demande est faite afin d'être authentifié , de cette façon le serveur peut rechercher le jeton d'envoi (qui a été initialement émis par le serveur) et vérifiez s'il est valide avant de renvoyer une réponse au client.
À mon avis, la principale raison pour laquelle utiliser un jeton d'authentification au lieu de cookies comme indiqué dans la FAQ Ember Auth est principalement à cause de la nature du cadre Ember.js et aussi parce qu'il correspond davantage au paradigme de l'application Web avec état . Par conséquent, le mécanisme de cookies n'est pas la meilleure approche lors de la création d'une application Ember.js.
J'espère que ma réponse donnera plus de sens à votre question.
la source
Http est apatride. Afin de vous autoriser, vous devez «signer» chaque demande que vous envoyez au serveur.
Authentification par jeton
Une demande adressée au serveur est signée par un "jeton" - cela signifie généralement définir des en-têtes http spécifiques, cependant, ils peuvent être envoyés dans n'importe quelle partie de la requête http (corps POST, etc.)
Avantages:
<img src="http://bank.com?withdraw=1000&to=myself" />
, et si vous êtes connecté via l'authentification par cookie à bank.com, et bank.com n'a aucun moyen de XSRF protection, je retirerai de l'argent de votre compte simplement par le fait que votre navigateur déclenchera une requête GET autorisée à cette URL.) Notez qu'il existe des mesures anti-falsification que vous pouvez faire avec l'authentification basée sur les cookies - mais vous devez les implémenter.Authentification des cookies
Dans l'ensemble, je dirais que les jetons vous offrent une meilleure flexibilité (puisque vous n'êtes pas lié à un seul domaine). L'inconvénient est que vous devez coder vous-même.
la source
Are send out for every single request
Les jetons sont également envoyés pour chaque demandeLes jetons doivent être stockés quelque part (stockage local / de session ou cookies)
Les jetons peuvent expirer comme les cookies, mais vous avez plus de contrôle
Le stockage local / de session ne fonctionnera pas sur les domaines, utilisez un cookie marqueur
Les demandes de contrôle en amont seront envoyées à chaque demande CORS
Lorsque vous avez besoin de diffuser quelque chose, utilisez le jeton pour obtenir une demande signée
Il est plus facile de gérer XSS que XSRF
Le token est envoyé à chaque demande, attention à sa taille
Si vous stockez des informations confidentielles, cryptez le jeton
Les jetons Web JSON peuvent être utilisés dans OAuth
Les jetons ne sont pas des balles d'argent, réfléchissez bien à vos cas d'utilisation d'autorisation
http://blog.auth0.com/2014/01/27/ten-things-you-should-know-about-tokens-and-cookies/
http://blog.auth0.com/2014/01/07/angularjs-authentication-with-cookies-vs-token/
la source
Pour les Googleurs :
ÉTAT
MÉCANISMES
Authorization
, ne sont que des en-têtes sans traitement spécial, le client doit gérer tous les aspects du transfertCOMPARAISON DE L'ÉTAT
hash(data + secret key)
, où la clé secrète n'est connue que du serveur, de sorte que l'intégrité des données de jeton peut être vérifiéeCOMPARAISON MÉCANISME
httpOnly
empêchant ainsi l'accès JavaScript du clientRÉSUMER
Lien
la source
Je pense qu'il y a une certaine confusion ici. La différence significative entre l'authentification basée sur les cookies et ce qui est désormais possible avec le stockage Web HTML5 réside dans le fait que les navigateurs sont conçus pour envoyer des données de cookies chaque fois qu'ils demandent des ressources au domaine qui les a définis. Vous ne pouvez pas empêcher cela sans désactiver les cookies. Les navigateurs n'envoient pas de données à partir du stockage Web à moins que le code de la page ne les envoie . Et les pages ne peuvent accéder qu'aux données qu'elles ont stockées, pas aux données stockées par d'autres pages.
Ainsi, un utilisateur inquiet de la manière dont ses données de cookies pourraient être utilisées par Google ou Facebook pourrait désactiver les cookies. Mais, ils ont moins de raisons de désactiver le stockage Web (jusqu'à ce que les annonceurs trouvent un moyen de l'utiliser également).
C'est donc la différence entre les cookies et les jetons, ce dernier utilise le stockage Web.
la source
L'authentification basée sur les jetons est sans état, le serveur n'a pas besoin de stocker les informations utilisateur dans la session. Cela donne la possibilité de mettre à l'échelle l'application sans se soucier de l'endroit où l'utilisateur s'est connecté. Il existe une affinité Web Server Framework pour les cookies, alors que ce n'est pas un problème avec les jetons. Ainsi, le même jeton peut être utilisé pour récupérer une ressource sécurisée à partir d'un domaine autre que celui dans lequel nous sommes connectés, ce qui évite une autre authentification uid / pwd.
Très bon article ici:
http://www.toptal.com/web/cookie-free-authentication-with-json-web-tokens-an-example-in-laravel-and-angularjs
la source
Utilisez le jeton lorsque ...
La fédération est souhaitée. Par exemple, vous souhaitez utiliser un fournisseur (Token Dispensor) comme émetteur de jetons, puis utiliser votre serveur api comme validateur de jetons. Une application peut s'authentifier auprès de Token Dispensor, recevoir un jeton, puis présenter ce jeton à votre serveur api pour qu'il soit vérifié. (La même chose fonctionne avec Google Sign-In. Ou Paypal. Ou Salesforce.com. Etc.)
L'asynchronie est requise. Par exemple, vous voulez que le client envoie une demande, puis stocke cette demande quelque part, pour être traitée par un système distinct «plus tard». Ce système séparé n'aura pas de connexion synchrone avec le client et il se peut qu'il ne soit pas connecté directement à un dispensaire central de jetons. un JWT peut être lu par le système de traitement asynchrone pour déterminer si l'élément de travail peut et doit être exécuté ultérieurement. C'est en quelque sorte lié à l'idée de Fédération ci-dessus. Attention cependant: JWT expire. Si la file d'attente contenant l'élément de travail n'est pas traitée pendant la durée de vie du JWT, les revendications ne doivent plus être approuvées.
Une demande signée par le client est requise. Ici, la demande est signée par le client en utilisant sa clé privée et le serveur validerait en utilisant la clé publique déjà enregistrée du client.
la source
L'une des principales différences est que les cookies sont soumis à la même politique d'origine alors que les jetons ne le sont pas. Cela crée toutes sortes d'effets en aval.
Étant donné que les cookies ne sont envoyés que vers et depuis un hôte particulier, cet hôte doit supporter la charge de l'authentification de l'utilisateur et l'utilisateur doit créer un compte avec des données de sécurité avec cet hôte afin d'être vérifiable.
Les jetons en revanche sont émis et ne sont pas soumis à la même politique d'origine. L'émetteur peut être n'importe qui et c'est à l'hôte de décider à quels émetteurs faire confiance. Un émetteur comme Google et Facebook bénéficie généralement d'une bonne confiance, de sorte qu'un hôte peut transférer la charge de l'authentification de l'utilisateur (y compris le stockage de toutes les données de sécurité de l'utilisateur) à une autre partie et l'utilisateur peut consolider ses données personnelles sous un émetteur spécifique et ne pas avoir à se souvenir d'un tas de mots de passe différents pour chaque hôte avec lequel ils interagissent.
Cela permet des scénarios d'authentification unique qui réduisent la friction globale dans l'expérience utilisateur. En théorie, le Web devient également plus sécurisé à mesure que des fournisseurs d'identité spécialisés émergent pour fournir des services d'authentification au lieu de laisser chaque site Web ma et pa faire tourner leurs propres systèmes d'authentification, probablement à moitié cuits. Et à mesure que ces fournisseurs émergent, le coût de la fourniture de ressources Web sécurisées, même pour des ressources très basiques, tend vers zéro.
Ainsi, en général, les jetons réduisent la friction et les coûts associés à l'authentification et transfèrent le fardeau des différents aspects d'un Web sécurisé vers des parties centralisées mieux à même de mettre en œuvre et de maintenir des systèmes de sécurité.
la source