<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Rezaul</title>
    <description>The latest articles on DEV Community by Rezaul (@ariyaan).</description>
    <link>https://dev.to/ariyaan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3563060%2Fe24e505f-013d-4ad1-915f-8f151661b05c.PNG</url>
      <title>DEV Community: Rezaul</title>
      <link>https://dev.to/ariyaan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ariyaan"/>
    <language>en</language>
    <item>
      <title>JWT Authentication: How a 10,000-Year-Old Mesopotamian Wisdom Became Your Login System</title>
      <dc:creator>Rezaul</dc:creator>
      <pubDate>Mon, 13 Oct 2025 20:39:37 +0000</pubDate>
      <link>https://dev.to/ariyaan/jwt-authentication-how-a-10000-year-old-mesopotamian-wisdom-became-your-login-system-3i4m</link>
      <guid>https://dev.to/ariyaan/jwt-authentication-how-a-10000-year-old-mesopotamian-wisdom-became-your-login-system-3i4m</guid>
      <description>&lt;h2&gt;
  
  
  A 10,000-Year-Old Problem
&lt;/h2&gt;

&lt;p&gt;Picture ancient Mesopotamia, around 8000 BCE. Life was booming. People were trading grain, livestock, and pottery between towns. The problem?&lt;br&gt;&lt;br&gt;
Once you handed off your goods, how could the other person prove the deal was real? There were no receipts, no emails, no “please find attached invoice.pdf.” Just a whole lot of &lt;em&gt;trust issues&lt;/em&gt; and long donkey rides.&lt;/p&gt;

&lt;p&gt;Imagine this:&lt;br&gt;&lt;br&gt;
A merchant named Naram is selling &lt;strong&gt;20 sheep&lt;/strong&gt; to a farmer named Ilu. Naram can’t accompany the delivery because, well, he’s busy selling more sheep (and arguing about barley prices). So he needs a way to prove that the person showing up at Ilu’s farm actually works for him.  &lt;/p&gt;

&lt;p&gt;What does he do?&lt;br&gt;&lt;br&gt;
He pulls out some &lt;strong&gt;clay tokens&lt;/strong&gt;. Each little token stands for something: one sheep, one jar of oil, one very awkward favour. He counts out twenty tokens, representing twenty sheep, and drops them into a round &lt;strong&gt;clay envelope&lt;/strong&gt; called a &lt;em&gt;bulla&lt;/em&gt;.  &lt;/p&gt;

&lt;p&gt;But here’s the clever part: before sealing it up, Naram rolls his &lt;strong&gt;cylinder seal&lt;/strong&gt; across the wet clay. Think of it as an ancient business logo carved into stone, maybe a lion, or his name in cuneiform, or a very dramatic sun symbol. Every seal was unique, like a signature.&lt;/p&gt;

&lt;p&gt;Once sealed, that &lt;em&gt;bulla&lt;/em&gt; became the Mesopotamian equivalent of a notarised contract. If the courier tried to sneak an extra sheep for himself or replace the envelope, the broken seal would give him away. When Ilu received the &lt;em&gt;bulla&lt;/em&gt;, he’d look at the seal, nod, and say,&lt;br&gt;&lt;br&gt;
“Yep, that’s Naram’s fancy lion logo!!! I can trust this.”  &lt;/p&gt;

&lt;p&gt;And boom! The deal was done. No witnesses needed. No follow-up letters were written on clay. Just a simple, elegant system of &lt;strong&gt;trust through tokens and seals&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It worked so well that it spread everywhere. From tiny trade villages to the great city of Uruk, everyone was sealing their business in clay. In fact, archaeologists have found thousands of these &lt;em&gt;bulla&lt;/em&gt;, some containing miniature shapes, cones, spheres, disks,  each representing goods or numbers. Basically, ancient accounting, but with better aesthetics.  &lt;/p&gt;

&lt;p&gt;It’s kind of beautiful, really. Humans were inventing &lt;strong&gt;proof&lt;/strong&gt; long before they even invented paper. They didn’t have math degrees or cybersecurity experts, yet they understood one timeless truth: you can’t build a civilisation without a way to &lt;strong&gt;prove who said what&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Fast forward 10,000 years, and not much has changed. The &lt;strong&gt;trust issues&lt;/strong&gt; are still very much here. Turns out, ancient wisdom ages better than we do.&lt;/p&gt;
&lt;h2&gt;
  
  
  Scene Two: A Modern Library, The Same Ancient Wisdom
&lt;/h2&gt;

&lt;p&gt;Imagine walking into your local library for the first time. You approach the front desk with your ID and documents, eager to start borrowing books. The librarian carefully verifies your identity, checks your address, and asks what type of membership you'd like—student, regular, or premium. After a few minutes of paperwork, they hand you a laminated membership card with the library's official seal embossed on it.&lt;/p&gt;

&lt;p&gt;The card contains some key information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your member ID&lt;/li&gt;
&lt;li&gt;Your membership type (Student/Regular/Premium)&lt;/li&gt;
&lt;li&gt;The expiration date&lt;/li&gt;
&lt;li&gt;The library's official seal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fast forward to your next visit. You walk in, pick up a book, and head to the checkout counter. This time, the librarian doesn't ask for your ID or cross-reference a massive database. They simply glance at your membership card, verify the library seal is authentic, read your membership level, and immediately know whether you can borrow that advanced research book or if your student membership restricts you to the general collection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is exactly how JWT authentication works: a digital descendant of those ancient Mesopotamian tokens.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What is JWT?
&lt;/h2&gt;

&lt;p&gt;JWT stands for &lt;strong&gt;JSON Web Token&lt;/strong&gt;. It's a compact, self-contained way for securely transmitting information between parties as a JSON object. Like your library card or those ancient clay bullae, it contains all the necessary information about who you are and what you're allowed to do, cryptographically sealed for authenticity.&lt;/p&gt;
&lt;h2&gt;
  
  
  The JWT Authentication Flow: Library Edition
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Registration &amp;amp; Login (Getting Your Library Card)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you first register or log in to an application:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// User logs in with credentials&lt;/span&gt;
&lt;span class="nx"&gt;POST&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;login&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;john@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;password&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;securePassword123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server acts like the librarian:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verifies your credentials against the database (checks your ID)&lt;/li&gt;
&lt;li&gt;Creates a JWT token containing your information (issues your library card)&lt;/li&gt;
&lt;li&gt;Signs it with a secret key (applies the library seal)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Server creates and returns JWT&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;jsonwebtoken&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;12345&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;john@example.com&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;premium&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;// 24 hours&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SECRET_KEY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Returns to client&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;token&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Subsequent Requests (Borrowing Books)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every time you make a request to the server, you include your JWT token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Client sends request with JWT in header&lt;/span&gt;
&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;books&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;advanced&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;section&lt;/span&gt;
&lt;span class="nx"&gt;Headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;Authorization&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The server (librarian) simply:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checks if the seal (signature) is valid&lt;/li&gt;
&lt;li&gt;Reads the information from the card (decodes the token)&lt;/li&gt;
&lt;li&gt;Makes authorization decisions based on the membership type (role/permissions)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Server middleware to verify JWT&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;verifyToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;next&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authorization&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt; &lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Verify the library seal is authentic&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;decoded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;SECRET_KEY&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// Check membership level for this section&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;decoded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;premium&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;decoded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;regular&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;decoded&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="nf"&gt;next&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Allow access&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;403&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Student members cannot access this section&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;401&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;error&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Invalid or expired library card&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. No Database Lookup Needed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Just like the librarian doesn't need to check the main database every time you borrow a book—or how Mesopotamian merchants didn't need to send messengers back to verify every sealed envelope—the server doesn't need to query the database to verify your identity on every request. The JWT token is self-contained—it carries all the necessary information and proof of authenticity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9dhhc3uwc5l4rssn9y6f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9dhhc3uwc5l4rssn9y6f.png" alt="JWT diagram" width="800" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Anatomy of a JWT Token
&lt;/h2&gt;

&lt;p&gt;A JWT consists of three parts, separated by dots:&lt;br&gt;
&lt;code&gt;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NSIsImVtYWlsIjoiam9obkBleGFtcGxlLmNvbSIsInJvbGUiOiJwcmVtaXVtIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;[Header].[Payload].[Signature]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Header (The Card Design)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"alg"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HS256"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"typ"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"JWT"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Specifies the algorithm used for the signature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Payload (Member Information)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"userId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"12345"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"email"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"john@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"premium"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"exp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1735689600&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Contains the claims—the information about the user and their permissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Signature (The Library Seal / Ancient Clay Seal)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;HMACSHA256(&lt;br&gt;
  base64UrlEncode(header) + "." + base64UrlEncode(payload),&lt;br&gt;
  secret&lt;br&gt;
)&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Ensures the token hasn't been tampered with—only someone with the secret key (the library, or the merchant's unique cylinder seal) can create valid signatures.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Clay to Code
&lt;/h2&gt;

&lt;p&gt;JWT authentication is like a smart library card system, or perhaps more accurately, like the brilliant clay token system that helped build the first civilisations. It's efficient, fast, and scalable. While it has its limitations, particularly around token revocation, it's become the go-to solution for modern web applications, especially those with microservice architectures or mobile apps.&lt;/p&gt;

&lt;p&gt;The concept has remained remarkably unchanged for 10,000 years: &lt;strong&gt;create a sealed token containing all necessary information, trust the seal, and conduct business without constant verification&lt;/strong&gt;. From clay bullae to JSON Web Tokens, humans have understood the power of cryptographically sealed, self-contained authentication.&lt;/p&gt;

&lt;p&gt;Next time you log into a website and don't need to re-authenticate with every action, remember: you're carrying a digital descendant of those ancient Mesopotamian clay tokens, sealed and trusted, that tells the server everything it needs to know about you, no database lookup required.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>authentication</category>
      <category>programming</category>
      <category>security</category>
    </item>
  </channel>
</rss>
