Quelle est la différence entre l'authentification par jeton et l'authentification par le biais de cookies?
J'essaie d'implémenter le Ember Auth Rails Démo mais je ne comprends pas les raisons pour lesquelles l'authentification par jeton est décrite à la Ember Auth FAQ = sur la question "Pourquoi l'authentification par jeton?"
Une application Web typique est principalement sans état , en raison de sa demande la nature. Le protocole HTTP est le meilleur exemple de protocole sans état . Mais comme la plupart des applications Web ont besoin de l’état pour pouvoir conserver l’état , entre serveur et client, les cookies sont utilisés de manière à ce que le serveur puisse renvoyer chaque réponse au client. Cela signifie que la prochaine demande émanant du client inclura ce cookie et sera donc reconnue par le serveur. De cette façon, le serveur peut gérer une session avec le client sans état , en sachant principalement tout ce qui concerne l'état de l'application , mais stocké sur le serveur. Dans ce scénario, le client ne détient à aucun moment l'état , ce qui n'est pas comment Ember.js .
Dans Ember.js, les choses sont différentes. Ember.js facilite le travail du programmeur, car il contient bien l’état pour vous, dans le client, sachant à tout moment qu’il en est ainsi state sans avoir à demander au serveur de demander des données d'état .
Cependant, le fait de conserver l'état dans le client peut également parfois entraîner des problèmes de simultanéité qui ne sont tout simplement pas présents dans sans état situations. Cependant, Ember.js traite également de ces problèmes pour vous, en particulier les données sur les braises sont conçues 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 typique sans état où la session , l’état et les cookies correspondants sont gérés presque complètement par le serveur. Ember.js conserve son état complètement en javascript (dans la mémoire du client, et non dans le DOM, contrairement à certains autres frameworks) et n'a pas besoin du serveur pour gérer la session. Ainsi, Ember.js est plus polyvalent dans de nombreuses situations, par exemple. lorsque votre application est en mode hors connexion.
É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é , le serveur peut ainsi rechercher le jeton d'envoi (initialement émis par serveur) et vérifiez si elle est valide avant de renvoyer une réponse au client.
À mon avis, la raison principale pour laquelle un jeton d'authentification est utilisé à la place des cookies, comme indiqué dans Ember Auth FAQ , est principalement due à la nature du cadre Ember.js et également parce qu'il correspond mieux à la paradigme de l'application Web avec état . Par conséquent, le mécanisme des 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.
Http est apatride. Pour vous autoriser, vous devez "signer" chaque requête 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 la définition d'en-têtes http spécifiques. Toutefois, ils peuvent être envoyés dans n'importe quelle partie de la demande http (corps du POST, etc.).
Avantages:
<img src="http://bank.com?withdraw=1000&to=myself" />
, Et si vous êtes connecté via une authentification par cookie sur bank.com, et bank.com ne le fait pas. N'ayant aucun moyen de protection XSRF, je retirerai de l'argent de votre compte simplement parce que votre navigateur déclenchera une demande GET autorisée à cette URL.) Notez qu'il existe des mesures anti-falsification que vous pouvez utiliser avec l'authentification par cookie - mais vous devez les mettre en œuvre.authentification par cookie
Globalement, je dirais que les jetons vous offrent une meilleure flexibilité (puisque vous n'êtes pas lié au domaine unique). L'inconvénient est que vous devez coder vous-même.
Les 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 fonctionne pas sur plusieurs domaines, utilisez un cookie de marqueur
Les demandes de contrôle en amont seront envoyées pour chaque demande de la SCRO
Lorsque vous avez besoin de diffuser quelque chose, utilisez le jeton pour obtenir une demande signée
Il est plus facile de traiter avec XSS que XSRF
Le jeton est envoyé à chaque demande, faites attention à sa taille
Si vous stockez des informations confidentielles, chiffrez 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 des autorisations.
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 certaine confusion ici. La différence significative entre l'authentification basée sur les cookies et ce qui est maintenant possible avec HTML5 Web Storage est 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éfinies. Vous ne pouvez pas empêcher cela sans désactiver les cookies. Les navigateurs n'envoient pas de données à partir de Web Storage sauf si le code de la page 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).
Donc, c'est la différence entre les cookies et les jetons, ce dernier utilise le stockage Web.
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 redimensionner une application sans se soucier du lieu de connexion de l'utilisateur. Il existe une affinité Web Server Framework pour les cookies, bien que ce ne soit pas un problème lié aux 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 sur lequel nous sommes connectés, ce qui évite une autre authentification uid/pwd.
Très bon article ici:
Utiliser un jeton quand ...
La fédération est souhaitée. Par exemple, vous souhaitez utiliser un fournisseur (Token Dispensor) en tant qu'émetteur de jeton, puis votre serveur api en tant que validateur de jeton. Une application peut s'authentifier auprès de Token Dispensor, recevoir un jeton, puis présenter ce jeton à votre serveur api pour vérification. (Même fonctionnement avec Google Sign-In. Ou Paypal. Ou Salesforce.com. Etc.)
L'asynchronisme est requis. Par exemple, vous voulez que le client envoie une demande, puis stocke cette demande quelque part, afin que ce dernier soit traité "ultérieurement" par un système distinct. Ce système distinct n’aura pas de connexion synchrone avec le client et n’aura peut-être pas de connexion directe avec un dispensaire de jetons central. un système de traitement asynchrone peut lire un fichier JWT pour déterminer si l'élément de travail peut et doit être rempli ultérieurement. Ceci est en quelque sorte lié à l’idée de la 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 fichier JWT, les revendications ne doivent plus être approuvées.
Cient La demande signée 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.
L'une des principales différences est que les cookies sont soumis à la politique de même origine, alors que les jetons ne le sont pas. Cela crée toutes sortes d'effets en aval.
Étant donné que les cookies sont uniquement envoyés vers et à partir d'un hôte particulier, cet hôte doit supporter l'authentification de l'utilisateur et ce dernier doit créer un compte avec des données de sécurité avec cet hôte pour pouvoir être vérifié.
Les jetons d’autre part sont émis et ne sont pas soumis à la même politique d’origine. L'émetteur peut être littéralement n'importe qui et c'est à l'hôte de décider à quels émetteurs faire confiance. Un émetteur tel que Google et Facebook jouit généralement d'une bonne confiance. Un hôte peut donc confier la tâche de l'authentification de l'utilisateur (y compris le stockage de toutes les données de sécurité de l'utilisateur) à un tiers. L'utilisateur peut ainsi consolider ses données personnelles sous un émetteur spécifique sans avoir à se souvenir d'un utilisateur. tas de mots de passe différents pour chaque hôte avec lequel ils interagissent.
Cela permet des scénarios de signature unique qui réduisent le frottement global dans l'expérience utilisateur. En théorie, le Web devient également plus sécurisé au fur et à mesure que les fournisseurs d’identité spécialisés proposent des services d’authentification au lieu de laisser chaque site Web ma et pa créer ses propres systèmes d’authentification, probablement à moitié cuits. Et au fur et à mesure que ces fournisseurs émettent le coût de la mise à disposition de ressources Web sécurisées pour des tendances même très élémentaires en matière de ressources, des tendances à zéro.
Ainsi, en général, les jetons réduisent les frictions et les coûts associés à l'authentification et transfèrent la charge des différents aspects d'un site Web sécurisé à des parties centralisées mieux à même de mettre en œuvre et de maintenir des systèmes de sécurité.