Skip to content
Tech News
← Back to articles

Stop Using JWTs

read original more articles
Why This Matters

This article emphasizes the risks and limitations of using JWTs for user authentication, advocating for traditional cookie-based sessions instead. It highlights security concerns, inefficiencies, and the mismatch between JWT design and session management needs, urging developers to adopt more secure and reliable methods. For consumers, this means better security and privacy protections in the apps and services they use daily.

Key Takeaways

Stop using JWTs!

TLDR: JWTs should not be used for keeping your user logged in. They are not designed for this purpose, they are not secure, and there is a much better tool which is designed for it: regular cookie sessions.

If you've got a bit of time to watch a presentation on it, I highly recommend this talk: https://www.youtube.com/watch?v=pYeekwv3vC4 (Note that other topics are largely skimmed over, such as CSRF protection. You should learn about other topics from other sources. Also note that "valid" usecases for JWTs at the end of the video can also be easily handled by other, better, and more secure tools. Specifically, PASETO.)

A related topic: Don't use localStorage (or sessionStorage) for authentication credentials, including JWT tokens: https://www.rdegges.com/2018/please-stop-using-local-storage/

The reason to avoid JWTs comes down to a couple different points:

The JWT specification is specifically designed only for very short-live tokens (~5 minute or less). Sessions need to have longer lifespans than that.

"stateless" authentication simply is not feasible in a secure way. You must have some state to handle tokens securely, and if you must have a data store, it's better to just store all the data. Most of this article and the followup it links to describes the specific issues: http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions/ (Yes, people are doing it, and yes, their applications are flawed, and you should not repeat that mistake.)

JWTs which just store a simple session token are inefficient and less flexible than a regular session cookie, and don't gain you any advantage.

The JWT specification itself is not trusted by security experts. This should preclude all usage of them for anything related to security and authentication. The original spec specifically made it possible to create fake tokens, and is likely to contain other mistakes. This article delves deeper into the problems with the JWT (family) specification.

Rebuttals

... continue reading