Jeton d'Authentification vs Cookies
Quelle est la différence entre le jeton d'authentification et d'authentification à l'aide des cookies?
Je suis en train de mettre en œuvre les Braise Auth Rails De Démonstration mais je ne comprends pas les raisons de l'aide jeton d'authentification tel que décrit dans le Braise Auth FAQ sur la question "Pourquoi le jeton d'authentification?"
- Un Jeton peut être donné à votre application mobile et stockée dans une variable (par vous) pour une utilisation ultérieure ou enregistré (par vous) via JavaScript dans votre navigateur pour utiliser au SPA demandes. Un Cookie est généralement utilisé dans un navigateur (par le navigateur).
- Voir l'article auth0.com/blog/cookies-vs-tokens-definitive-guide écrit en 2016.
Vous devez vous connecter pour publier un commentaire.
Une application web standard est principalement apatrides, à cause de la de requête/réponse la nature. Le protocole HTTP est le meilleur exemple d'une apatrides protocole. Mais puisque la plupart des applications web besoin état, afin de tenir la état, entre le serveur et le client, les cookies sont utilisés tels que le serveur peut envoyer à chaque réponse au client. Cela signifie que la prochaine demande de la part du client comprendra ce cookie et donc être reconnu par le serveur. De cette façon, le serveur peut maintenir un session avec le apatrides client, sachant que la plupart du temps tout à propos de l'application de la état, mais stockées dans le serveur. Dans ce scénario, à aucun moment le client ne peut tenir état, ce qui n'est pas la façon dont Ember.js œuvres.
Dans Ember.js les choses sont différentes. Ember.js fait le programmeur de la tâche plus facile, car il détient en effet le état pour vous, le client, en sachant à chaque instant à ce sujet le état sans avoir à faire une demande au serveur demandant état de données.
Toutefois, le maintien de état dans le client peut aussi parfois présenter des problèmes de concurrence, qui sont tout simplement pas présent dans apatrides situations. Ember.js toutefois, traite cette question pour vous, spécifiquement ember-data est construit avec cela à l'esprit. En conclusion, Ember.js est un framework conçu pour stateful clients.
Ember.js ne fonctionne pas comme un typique apatrides application web où l' session, le état et les cookies sont gérés presque complètement par le serveur. Ember.js tient c'est état entièrement en javascript (dans la mémoire du client, et non pas dans les DOM à l'instar de certains autres cadres) et n'a pas besoin de serveur pour gérer la session. Il en résulte Ember.js d'être plus polyvalent dans de nombreuses situations, par exemple lorsque votre application est en mode hors connexion.
Évidemment pour des raisons de sécurité, il n'a besoin d'un certain type de jeton ou clé unique d'être envoyé au serveur chaque fois qu'une demande est faite pour être authentifié, de cette façon, le serveur de recherche de l'envoyer jeton (qui a été initialement délivré par le serveur) et de vérifier si il est valide avant d'envoyer une réponse au client.
À mon avis, la principale raison pourquoi utiliser un jeton d'authentification au lieu de biscuits comme indiqué dans Braise Auth FAQ est principalement en raison de la nature de la Ember.js cadre et aussi parce que cela correspond davantage à la stateful web app paradigme. Par conséquent, le mécanisme des cookies n'est pas la meilleure approche lors de la construction d'un Ember.js app.
J'espère que ma réponse sera donner plus de sens à votre question.
Http est sans état. Afin de vous autoriser, vous avez à "signer" à chaque demande unique que vous envoyez au serveur.
Jeton d'authentification
Une demande au serveur est signé par un "jeton" - généralement, cela signifie l'établissement des en-têtes http, cependant, ils peuvent être envoyés dans n'importe quelle partie de la requête http (POST du corps, etc.)
Pour:
<img src="http://bank.com?withdraw=1000&to=myself" />
, et si vous êtes connecté via le cookie d'authentification à bank.com et bank.com n'ayant pas de moyens de XSRF de protection, je vais retirer de l'argent à partir de votre compte simplement par le fait que votre navigateur va déclencher un autorisées requête GET à l'url.) Remarque: il existe des anti-contrefaçon mesure que vous pouvez faire avec cookie d'authentification - mais vous avez à mettre en œuvre ces.Cookie d'authentification
Globalement, je dirais que les jetons de vous donner une meilleure flexibilité, (puisque vous n'êtes pas lié à un seul domaine). L'inconvénient, c'est que vous avez à faire assez peu de codage par vous-même.
Are send out for every single request
Les jetons sont à envoyer pour chaque demande tropcrazy stuff like a reverse proxy.
Dans l'ensemble, une grande réponse, mais je sens que cette partie est quelque peu trompeur. Proxy inverse d'une API sous un seul URL de point de terminaison n'est pas fou, et parfois nécessaire (a à la fois un SPA site web pour IE9 clients). Ayant un point de terminaison de votre API est idéal pour la propagation de la charge, en particulier dans un SPA site web, ou un scénario où votre API est très utilisé par d'autres applications. L'étiquetage d'un proxy inverse comme "truc de dingue" est un peu beaucoup.Les jetons doivent être stockés quelque part (local de stockage de session ou cookies)
Jetons peut expirer, comme les cookies, mais vous avez plus de contrôle
Local/stockage de session ne fonctionne pas à travers les domaines, utilisez un marqueur cookie
De contrôle en amont les demandes seront envoyées sur chaque SCRO demande
Lorsque vous avez besoin de diffuser de quelque chose, utiliser le jeton pour obtenir une demande signée
Il est plus facile de traiter avec XSS que XSRF
Le jeton est envoyé pour chaque demande, la montre de sa taille
Si vous stockez des informations confidentielles, de chiffrer le jeton
JSON Web Jetons peuvent être utilisés dans OAuth
Les jetons ne sont pas des balles d'argent, pensez à votre autorisation d'utiliser des cas soigneusement
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/
Je crois qu'il y a une confusion ici. La différence significative entre basées sur les cookies d'authentification et de ce qui est désormais possible avec De Stockage Web HTML5 est que les navigateurs sont conçus pour envoyer des données de cookie à chaque fois qu'ils demandent des ressources à partir du domaine de définition. Vous ne pouvez pas empêcher que, sans la désactivation des cookies. Les navigateurs ne pas envoyer de données à partir du Web de Stockage à moins que le code dans la page envoie. Et les pages peuvent uniquement accéder à des données stockées, les données enregistrées par d'autres pages.
Ainsi, un utilisateur inquiets de la façon dont leurs données de cookie peut être utilisé par Google ou Facebook peut désactiver les cookies. Mais, ils ont moins de raison pour désactiver Web de Stockage (jusqu'à ce que les annonceurs à trouver un moyen de l'utiliser en tant que bien).
Donc, c'est la différence entre basées sur les cookies et la base de jetons, ce dernier utilise de Stockage Web.
Base de jetons d'authentification est apatride, le serveur n'a pas besoin de stocker des informations de l'utilisateur dans la session. Cela donne la capacité à l'échelle de l'application sans se soucier de l'endroit où l'utilisateur a ouvert une session. Il y a web Server Cadre affinité basée sur les cookies alors que ce n'est pas un problème avec la base de jetons. Donc, le même jeton peut être utilisé pour l'extraction d'une ressource sécurisée à partir d'un domaine autre que celle que nous sommes connectés en ce qui évite un autre uid/pwd authentification.
Très bon article ici:
http://www.toptal.com/web/cookie-free-authentication-with-json-web-tokens-an-example-in-laravel-and-angularjs
L'une des principales différences est que les cookies sont soumis à la Même règle d'Origine alors que les jetons ne sont pas. Cela crée toutes sortes de descendre la rivière effets.
Depuis des cookies sont envoyés vers et à partir d'un hôte particulier que l'hôte doit supporter la charge de l'authentification de l'utilisateur et l'utilisateur doit créer un compte avec la sécurité des données avec celle de l'hôte afin d'être vérifiable.
Jetons d'autre part, sont émis et ne sont pas soumis à la même règle d'origine. L'émetteur peut être littéralement tout le monde et c'est à l'hôte de décider lequel des émetteurs de confiance. Un émetteur comme Google et Facebook est généralement un bon niveau de confiance, donc un hôte peut déplacer la charge de l'authentification de l'utilisateur (y compris le stockage de toutes les données de sécurité utilisateur) à l'autre partie et l'utilisateur peut consolider leurs données personnelles dans le cadre d'un émetteur et de ne pas avoir le souvenir d'un tas de mots de passe différents pour chaque hôte avec lesquelles ils interagissent.
Cela permet l'authentification unique sur les scénarios de réduire l'ensemble de la friction dans l'expérience de l'utilisateur. En théorie, le web devient aussi plus sécurisé en tant qu'institution spécialisée des fournisseurs d'identité le jour pour fournir de l'auth services au lieu d'avoir tous les ma et pa site de la filature de leur propre, probablement la moitié cuit, auth systèmes. Et comme ces fournisseurs émerger le coût de la prestation de sécurité de ressources sur le web, même très basique tendances en matière de ressources vers zéro.
Donc, en général, des jetons de réduire le frottement et les coûts associés à la fourniture de l'authentification et des changements de la charge des différents aspects d'un web sécurisé à la centralisation des parties de mieux en mesure de mettre en œuvre et maintenir des systèmes de sécurité.
Utilisation Jeton lorsqu'...
Fédération est souhaitée. Par exemple, vous souhaitez utiliser un fournisseur (Jeton Dispensor) que l'émetteur de jeton, puis à l'aide de l'api serveur que le jeton de validateur. Une application peut s'authentifier à Jeton Dispensor, de recevoir un jeton, puis présenter le jeton à votre serveur d'api à être vérifiée. (Même fonctionne avec Google connexion. Ou Paypal. Ou Salesforce.com. etc)
L'asynchronie est nécessaire. Par exemple, vous voulez que le client pour envoyer une demande, puis magasin de demande de quelque part, d'être sollicité par un système distinct "plus tard". Que le système n'aura pas de connexion synchrone pour le client, et il peut ne pas avoir une connexion directe à un centre de jeton dispensaire. un JWT peut être lu que par le traitement asynchrone système afin de déterminer si l'élément de travail peut et doit être réalisé au plus tard. C'est, en un sens, liées à la Fédération idée ci-dessus. Être prudent, cependant: JWT date d'expiration. Si la file d'attente de la tenue de l'élément de travail ne sont pas traités à l'intérieur de la durée de vie de la JWT, les demandes ne sont plus fiables.
Cace Signée de la demande est nécessaire. Ici, la demande est signée par le client à l'aide de sa clé privée et le serveur serait de valider à l'aide de déjà enregistré la clé publique du client.