web-dev-qa-db-fra.com

JWT vs certificats clients

Nous avons un serveur de transactions auquel sont connectées différentes applications clientes. L'exigence est d'avoir un moyen d'authentification sécurisé pour que les applications clientes puissent communiquer avec le serveur de transactions. Les deux solutions envisagées sont le JWT et les certificats clients.

À votre avis, quels sont les avantages et les inconvénients de l'une ou l'autre option du point de vue de la sécurité et de l'efficacité. Je me rends compte que cette question est un peu générique et c'est précisément parce que nous voulons obtenir des idées plus généralisées avant de passer à une solution spécifique étant donné que ces composants sont encore en cours de développement.

Tous les conseils de ceux qui ont utilisé l'une ou l'autre technologie seraient appréciés!

12
Nixman55

Pour un peu de contexte, j'ai beaucoup travaillé avec l'authentification basée sur les jetons JWT, mais j'ai peu d'expérience avec les certificats clients, donc ma réponse pèsera biaisée (informations et avis) sur JWT.

Avantages du jeton JWT:

  • Peut être facilement généré (ou régénéré) et peut inclure des dates/heures d'expiration pour réduire les dommages dus à un jeton JWT volé
  • Peut inclure des "réclamations" dans la charge utile pour transporter des informations supplémentaires, peut-être le rôle de l'appareil client ou littéralement n'importe quelle paire clé-valeur que vous souhaitez
  • Facile à transporter car une fois encodé, ce n'est qu'une chaîne
  • La grande majorité des langues ont des bibliothèques pour faire le gros du travail. Voir: page bibliothèques

Inconvénients du jeton JWT:

  • Vous aurez généralement besoin d'un serveur d'authentification ou d'un module sur votre serveur de transaction pour distribuer ces
  • Les choses peuvent devenir très compliquées ou impossibles selon la façon dont votre client doit s'authentifier. Tant que l'utilisateur possède des informations de connexion, c'est très bien car elles peuvent être utilisées pour authentifier initialement le client avant d'envoyer le jeton JWT. Sinon, vous avez besoin de moyens pour confirmer initialement l'authenticité du client

Certificats clients Pros:

  • Nécessite l'installation d'un seul certificat (au moment de la configuration? Ça dépend) une seule fois
  • Ne nécessite aucun code côté serveur pour créer et distribuer des certificats de la même manière que JWT

Certificats clients Contre:

  • Si un certificat est jamais compromis, il peut être utilisé dans les attaques de style de relecture aussi longtemps qu'il est valide (et qu'il n'est pas reconnu comme compromis, sinon il pourrait être sur liste noire)
  • Nécessite un point de stockage permanent sécurisé sur l'appareil client. Contrairement aux jetons JWT qui pourraient être stockés en mémoire en toute sécurité et finalement détruits au moment de l'arrêt du client ou de la fermeture de l'application, le certificat devrait être enregistré de manière persistante dans un emplacement sécurisé. Selon ce qu'est exactement le client, cela peut être très difficile, voire impossible

Mon avis: les jetons JWT sont une méthode sécurisée et standardisée d'authentification client et je le recommanderais.

6
dFrancisco

Cela ne peut être répondu sans mieux comprendre votre environnement.

  • Tout cela appartient-il à votre propre domaine ou ces externes se connectent-ils à votre service?
  • Ces services nécessitent-ils un ensemble d'autorisations différent les uns des autres?
  • Ces services sont-ils utilisés pour déléguer une identité d'utilisateur utilisée en aval?
  • Comment ces services se communiquent-ils? DU REPOS? Binaire?
  • Quelle est la pile technologique avec laquelle vous travaillez?

Les certificats client sont utiles comme moyen d'authentification, mais si votre exigence est d'avoir des autorisations différentes pour les services accédant à votre propre service, un certificat client seul ne va pas aider. Comme mentionné ci-dessus, vous devrez gérer les certificats que vous avez émis - mais ce constrant existe avec les JWT qui doivent également être signés. Si vous avez plusieurs certificats externes, vous

Les JWT sont utiles si les consommateurs ont des autorisations différentes et accèdent à votre service via REST. Si la communication n'est pas REST alors ne vous embêtez pas avec les JWT. Vous devrez également gérer le certificat de signature dans les JWT. Si vous prévoyez d'utiliser des JWT, soyez conscient des faiblesses qu'ils avoir:

  • Attaques d'algorithmes contre des bibliothèques qui respectent la valeur aucune
  • Attaques de rejeu JWT
  • Les JWT nécessitent TLS sur la couche transport
  • Certains frameworks JWT vous permettent d'attaquer le système en basculant les types d'algorithmes de RS256 à HS256 et en signant avec la clé publique

Il n'y a rien de mal avec les JWT lorsqu'ils sont implémentés correctement, ses personnes justes peuvent bousiller l'implémentation JWT. Je suis biaisé parce que j'essaie actuellement de traiter les modèles JWT dans ma propre organisation qui conduisent à des failles de sécurité car la validation a ignoré les dates d'expiration ...

1
McMatty