Quelle est la différence entre une authentification basée sur des clés et une authentification basée sur des clés?

j'ai pensé que OAuth est fondamentalement une spécification d'authentification basée sur un jeton mais la plupart des cadres temporels agissent comme s'il y avait une différence entre eux. Par exemple, comme indiqué dans l'image ci-dessous Jhipster demande s'il faut utiliser une authentification basée sur un défaut ou une authentification basée sur un jeton.

ce n'est pas la même chose ? Quelle est exactement la différence puisque les deux incluent des tokens dans leurs implémentations ?

enter image description here

44
demandé sur Cemre 2016-01-14 11:19:40

3 réponses

C'est une bonne question -- il y a beaucoup de confusion autour de tokens et D'OAuth.

tout d'abord, lorsque vous mentionnez OAuth, vous faites probablement référence à la norme OAuth2 . C'est la dernière version du protocole D'OAuth, et c'est ce dont la plupart des gens parlent spécifiquement quand ils disent "OAuth".

le protocole OAuth prend en charge plusieurs types d'authentification et d'autorisation (4 pour être précis).

deuxièmement, le protocole OAuth fonctionne en authentifiant les utilisateurs via des tokens. L'idée ici est celle-ci:

au lieu que votre utilisateur envoie ses identifiants réels à votre serveur sur chaque requête (comme ils le feraient avec L'Auth de base, où un utilisateur envoie son nom d'utilisateur/mot de passe au serveur pour chaque requête), avec OAuth vous échangez d'abord vos identifiants d'utilisateur pour un 'token', puis authentifiez les utilisateurs basés sur ce 'token'.

l'idée de OAuth est qu'en obligeant les utilisateurs à transmettre leurs justificatifs d'identité confidentiels sur le réseau moins fréquemment, moins de mauvaises choses peuvent se produire. (C'est l'idée, de toute façon.)

maintenant, voici où les tokens entrent en jeu: la spécification de OAuth est construite autour du concept de tokens, mais ne précise pas ce qu'est un TOKEN.

dans le sens le plus "général", un token est juste une chaîne qui identifie un utilisateur de façon unique. C'est tout.

Les gens se sont rendus compte de cela, et ont développé une nouvelle norme pour la création de jetons, appelé le JSON Web Token standard . Cette norme fournit essentiellement un ensemble de règles pour créer des tokens d'une manière très spécifique, ce qui rend les tokens plus utiles pour vous en général.

JWTs vous permettent de faire des choses comme:

  • signe cryptographique un jeton pour que vous sachiez qu'un jeton n'a pas été altéré par un utilisateur.
  • Chiffrez les jetons de sorte que le contenu ne peut pas être lu dans le texte simple.
  • intègre les données JSON à l'intérieur d'une chaîne token de manière standard.

maintenant, pour la plupart: à peu près tout le monde dans la communauté de développement a convenu que si vous utilisez une sorte de OAuth, alors les tokens que vous utilisez devraient être JSON Web Tokens.

==========

OK! Maintenant que nous avons couvert l'histoire, laissez-moi répondre à votre question.

le choix que vous faites ci-dessus est de savoir si vous voulez activer ou non la spécification complète OAuth2 pour l'Authentification / autorisation (ce qui est assez complexe), ou si vous voulez simplement une "authentification de token" de base.

parce que le protocole OAuth fournit plusieurs façons différentes d'authentifier D'une manière conforme aux normes, il ajoute beaucoup de complexité à la plupart des systèmes d'authentification.

pour cette raison, un beaucoup de cadres offrent une version "édulcorée" du flux de subvention de mot de passe OAuth2, qui est essentiellement une méthode simple où:

  • un utilisateur envoie son nom d'utilisateur/mot de passe à votre serveur à une URL comme /login.
  • votre serveur génère un token JWT pour l'utilisateur.
  • votre serveur renvoie ce token à l'utilisateur.
  • l'utilisateur stocke ce token dans ses cookies, appareil mobile, ou API possible serveur, où ils l'utilisent pour faire des demandes.

encore une fois: le flux ci-dessus N'est pas conforme OAuth, mais est une version légèrement plus simple qui utilise encore des tokens.

le point principal ici est que les jetons (JWT) sont généralement utiles, et n'ont pas besoin d'être jumelés avec le flux D'eau.

je me rends compte qu'il s'agit d'un mur de texte, mais j'espère qu'il répondra à votre question plus en profondeur=)

96
répondu rdegges 2016-01-21 17:27:57

Lorsque vous demandez des ressources de web sécurisé service, vous pouvez fournir un jeton d'authentification sur l'appel. Le token ACT agit comme" code secret " pour accéder à la ressource.

OAuth est juste un type spécifique de méthode d'authentification basée sur un jeton.

4
répondu lipponen 2016-01-14 10:49:29

OAuth est un cahier des charges pour l'autorisation de ne pas l'authentification

OAuth 2.0 est une spécification pour l'autorisation, mais pas pour l'authentification. RFC 6749, 3.1. Le paramètre d'autorisation dit explicitement ce qui suit:

L'autorisation d'extrémité est utilisé pour interagir avec le propriétaire de la ressource et d'obtenir une autorisation de la subvention. Le serveur d'autorisation doit d'abord vérifier l'identité de la ressource propriétaire. La façon dont le le serveur d'autorisation authentifie le propriétaire de la ressource (par ex. et login de mot de passe, cookies de session) est au-delà de la portée de cette cahier des charges .

n'utilisez OAuth que si vous souhaitez donner accès à un service tiers à vos API. Même lorsque vous utilisez OAuth, vous aurez besoin d'une sorte d'authentification (basée sur un jeton ou une session, etc.) pour authentifier les utilisations. Outh n'est pas conçu pour Authentication.

voir cette question .

0
répondu nithin 2018-09-27 20:55:54