برنامه نویسی

راهنمای کامل JSON Web Token (JWT).

JSON Web Tokens (JWT) یک استاندارد باز (RFC 7519) برای انتقال امن اطلاعات بین طرفین به عنوان یک شی JSON است. این اطلاعات به دلیل امضای دیجیتالی قابل تأیید و اعتماد است.

1. JWT چیست؟

JWT ابزاری فشرده و ایمن برای نشان دادن ادعاهایی است که باید بین دو طرف منتقل شود. توکن از سه بخش تشکیل شده است:

مثال:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این توکن شامل موارد زیر است:

  • سربرگ: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
  • بار: eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
  • امضا: SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

2. اجزای JWT

الف سربرگ

هدر معمولاً از دو بخش تشکیل شده است: نوع توکن (یعنی JWT) و الگوریتم امضای مورد استفاده، مانند HMAC SHA256 یا RSA.

مثال:

{
  "alg": "HS256",
  "typ": "JWT"
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این JSON سپس Base64Url کدگذاری می شود تا اولین قسمت JWT را تشکیل دهد.

ب بار

محموله حاوی مطالبات است. ادعاها اظهاراتی در مورد یک نهاد (معمولاً کاربر) و داده های اضافی هستند. سه نوع ادعا وجود دارد:

  • ادعاهای ثبت شده: ادعاهای از پیش تعریف شده مانند iss (صادر کننده)، exp (انقضا) sub (موضوع)، و aud (مخاطب).
  • ادعاهای عمومی: ادعاهای ایجاد شده برای به اشتراک گذاری عمومی.
  • ادعاهای خصوصی: ادعاهای سفارشی ایجاد شده برای به اشتراک گذاشتن اطلاعات بین طرفینی که موافق استفاده از آنها هستند.

مثال:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این نیز Base64Url رمزگذاری شده است تا قسمت دوم JWT را تشکیل دهد.

ج. امضا

برای ایجاد قسمت امضا، باید هدر کدگذاری شده، بار رمزگذاری شده، یک راز و الگوریتم مشخص شده در هدر را بگیرید و آن را امضا کنید.

مثال با استفاده از HMAC SHA256:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

از امضا برای تأیید اینکه فرستنده JWT همان کسی است که می گوید و اطمینان حاصل شود که پیام در طول مسیر تغییر نکرده است استفاده می شود.

3. JWT چگونه کار می کند

  1. ورود کاربر: هنگامی که یک کاربر وارد سیستم می شود، سرور کاربر را احراز هویت می کند و یک JWT تولید می کند و آن را با یک کلید مخفی امضا می کند.
  2. فروشگاه های مشتری JWT: مشتری این JWT را ذخیره می کند (معمولاً در محلی ذخیره یا یک کوکی).
  3. مشتری JWT می فرستد: مشتری JWT را در قسمت ارسال می کند Authorization سربرگ درخواست های آینده
  4. سرور JWT را تأیید می کند: سرور امضای رمز را تأیید می کند و ادعاها را استخراج می کند.

4. JWT در Node.js

بیایید ببینیم چگونه می توانید JWT را در یک برنامه Node.js با استفاده از jsonwebtoken کتابخانه

نصب و راه اندازی

npm install jsonwebtoken
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تولید توکن

const jwt = require('jsonwebtoken');

// Generate a token
const token = jwt.sign({ id: 123, name: "John Doe" }, 'your-256-bit-secret', {
  expiresIn: '1h' // expires in 1 hour
});

console.log(token);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

تایید یک توکن

jwt.verify(token, 'your-256-bit-secret', function(err, decoded) {
  if (err) {
    console.log('Token is not valid');
  } else {
    console.log('Decoded token:', decoded);
  }
});
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

5. مثال مورد استفاده

Express Middleware برای احراز هویت

شما می توانید میان افزار برای محافظت از مسیرها ایجاد کنید.

const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();

const authenticateJWT = (req, res, next) => {
    const token = req.header('Authorization');
    if (!token) return res.status(401).send('Access Denied');

    try {
        const verified = jwt.verify(token, 'your-256-bit-secret');
        req.user = verified;
        next();
    } catch (err) {
        res.status(400).send('Invalid Token');
    }
};

app.get('/protected', authenticateJWT, (req, res) => {
    res.send('You are viewing protected content!');
});

app.listen(3000, () => console.log('Server running on port 3000'));
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

6. بهترین شیوه ها

  • کلید مخفی خود را ایمن نگه دارید: کلیدهای خود را با استفاده از متغیرهای محیطی یا ابزارهای مدیریت مخفی ذخیره کنید.
  • از HTTPS استفاده کنید: همیشه JWT ها را از طریق HTTPS ارسال کنید تا از رهگیری جلوگیری شود.
  • انقضای مناسب را تنظیم کنید: همیشه با استفاده از علامت انقضا روی توکن های خود تنظیم کنید exp ادعا

نتیجه گیری

JWT ها روشی قدرتمند برای احراز هویت کاربران و انتقال ایمن اطلاعات بین طرفین ارائه می دهند. با درک ساختار و استفاده از JWT ها، می توانید مکانیسم های احراز هویت قوی را در برنامه های خود پیاده سازی کنید.

این راهنما اصول اولیه JWT، ساختار آن، نحوه کارکرد و پیاده سازی عملی در برنامه Node.js را پوشش می دهد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

همچنین ببینید
بستن
دکمه بازگشت به بالا