web-dev-qa-db-fra.com

Jeton porteur d'identité ASP.NET vs avantages et inconvénients JWT

J'ai utilisé ASP.NET Identity pendant un certain temps maintenant et j'ai regardé JWT (JSON Web Token) car ils semblent vraiment intéressants et faciles à utiliser.

JWT.IO a un excellent exemple/outil de débogage du jeton.

Cependant, je ne sais pas exactement comment fonctionne JWT sur le back-end, utiliseriez-vous toujours l'identité?

Comment les jetons (Bearer vs JWT) se comparent-ils également? Quel est le plus sûr?

18
shammelburg

Les JWT sont comme un ticket pour une attraction. Il contient toutes les informations de sécurité dont un serveur a besoin. Une fois que le serveur l'a distribué, le client doit simplement le présenter chaque fois qu'il demande quelque chose et le serveur répond en conséquence s'il est valide.

Le contenu est entièrement visible, mais il est signé à l'aide d'une clé secrète par le serveur afin qu'il puisse savoir s'il a été falsifié.

Étant donné que tout se trouve dans le JWT et que le client peut le présenter à qui il veut, vous pouvez l'utiliser pour l'authentification unique tant que les différents serveurs partagent le même secret afin de pouvoir vérifier la signature.

Comme un ticket, un JWT a une date d'expiration. Tant qu'il n'a pas expiré, il est valide. Cela signifie que vous ne pouvez pas les révoquer avant cela. Pour cette raison, les JWT ont souvent des délais d'expiration courts (30 minutes environ) et le client reçoit également un jeton d'actualisation afin de renouveler rapidement le JWT à son expiration.

JWT

  • Non stocké sur le serveur
  • Idéal pour SSO
  • Ne peut être révoqué prématurément

Les jetons au porteur sont comme une liste d'invités. Le serveur place le client sur la liste des invités, puis fournit un code d'accès pour l'identifier lorsqu'il veut quelque chose. Lorsque le client fournit le code, le serveur le recherche dans la liste et vérifie qu'il est autorisé à faire tout ce qu'il demande.

Le serveur doit avoir la liste à sa disposition, donc si vous souhaitez partager l'accès entre les serveurs, ils doivent tous pouvoir accéder à la liste (base de données) ou parler à une autorité qui en dispose (serveur d'authentification).

D'un autre côté, puisqu'ils ont la liste des invités, ils peuvent vous en retirer quand ils le souhaitent.

Jetons au porteur

  • Stocké sur le serveur
  • Peut être révoqué à tout moment
  • Nécessite une autorité centrale ou une base de données partagée pour partager le jeton entre les serveurs

Bit of Tech propose d'excellents didacticiels sur la mise en œuvre de JWT avec Web Api si vous souhaitez suivre cette voie.

http://bitoftech.net/2015/02/16/implement-oauth-json-web-tokens-authentication-in-asp-net-web-api-and-identity-2/

34
JamesT

Malheureusement, la réponse précédente peut être trompeuse: Les jetons de porteur sont le type prédominant de jeton d'accès utilisé avec OAuth 2.0. A Le jeton du porteur est une chaîne opaque, non destinée à avoir une signification pour les clients qui l'utilisent. Certains serveurs émettront des jetons qui sont une courte chaîne de caractères hexadécimaux, tandis que d'autres peuvent utiliser des jetons structurés tels que JSON Jetons Web . ( https://oauth.net/2/bearer-tokens/ )

5
Simone