برنامه نویسی

OAUTH یا JWT؟ همه چیز توسعه دهندگان باید در سال 2025 بدانند

https://www.nilebits.com/blog/2025/05/oauth-jwt-everything-need-wanky-2025/
در توسعه نرم افزار معاصر ، مجوز و احراز هویت عناصر اساسی هستند. OAUTH و JWT (Tokens Web JSON) دو مورد از پروتکل ها و استانداردهای پرکاربرد امروزه در دسترس توسعه دهندگان هستند. با وجود استفاده مکرر در کنار آنها ، آنها عملکردهای متمایز دارند و نمی توانند جایگزین یکدیگر شوند. در این مقاله یک تجزیه و تحلیل کامل در کنار هم از OAUTH و JWT ارائه شده است ، توضیح می دهد که چگونه هر یک از عملکردها ، چه موقع از آن استفاده می کنند و چرا برای امنیت کاربرد معاصر مهم است.

این که آیا شما در حال توسعه یک معماری میکروسرویس ، یک باطن موبایل یا یک محصول SaaS هستید ، درک تفاوت های کلیدی و اجرای عملی OAUTH و JWT به شما در طراحی سیستم های امن تر و مقیاس پذیر تر کمک می کند.

OAUTH چیست؟
OAUTH (مجوز آزاد) یک پروتکل استاندارد باز برای مجوز است ، که معمولاً برای اعطای برنامه های شخص ثالث دسترسی به منابع بدون افشای اعتبار کاربر استفاده می شود.

ویژگی های کلیدی
دسترسی واگذار شده (مجوز بدون اشتراک گذرواژه)
دسترسی مبتنی بر توکن (نشانه های دسترسی)
از چندین نوع کمک هزینه (کد مجوز ، اعتبار مشتری ، رمز عبور و غیره) پشتیبانی می کند
اغلب در رابطه با OpenID Connect برای تأیید اعتبار استفاده می شود
مورد استفاده مشترک
به کاربر اجازه می دهد با استفاده از حساب Google یا Facebook خود به برنامه خود وارد شوید.

JWT چیست؟
JWT (JSON Web Token) یک استاندارد باز (RFC 7519) برای انتقال ایمن اطلاعات بین طرفین به عنوان یک شیء JSON است. معمولاً برای احراز هویت و تبادل اطلاعات استفاده می شود.

ویژگی های کلیدی
خود حاوی و بدون تابعیت
شیء JSON رمزگذاری شده Base64 با امضای
از رمزگذاری HMAC یا RSA پشتیبانی می کند
معمولاً در مکانیسم های احراز هویت بدون تابعیت استفاده می شود
مورد استفاده مشترک
ذخیره داده های جلسه کاربر در یک نشانه امضا شده برای جلوگیری از جستجوی پایگاه داده برای هر درخواست.

OAUTH و JWT: آیا آنها یکسان هستند؟
شماره OAUTH یک پروتکل است و JWT یک قالب توکن است.

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

چه موقع از OAUTH استفاده کنید
از oauth استفاده کنید:

شما به مجوز واگذار شده نیاز دارید
شما API ها را در معرض توسعه دهندگان شخص ثالث قرار می دهید
شما نیاز به دسترسی مبتنی بر دامنه به منابع دارید
شما باید احراز هویت (OpenID Connect) و مجوز را جدا کنید
چه موقع از JWT استفاده کنید
از JWT استفاده کنید وقتی:

شما مدیریت جلسه بدون تابعیت را می خواهید
شما می خواهید ادعاهای کاربر را مستقیماً در یک نشانه جاسازی کنید
شما به احراز هویت سریع و مقیاس پذیر نیاز دارید
شما در حال اجرای Single Sign-On (SSO) هستید
OAUTH در مقابل JWT: مقایسه جدولی
ویژگی OAUTH JWT
تعریف فرمت پروتکل مجوز تعریف برای تأیید اعتبار
دسترسی به هدف دسترسی به API انتقال هویت و ادعاها
بدون تابعیت می تواند بی تاب و بدون تابعیت باشد
فرمت توکن متفاوت است (می تواند JWT ، مات و غیره باشد) همیشه فرمت JWT
مورد استفاده برای تأیید اعتبار و تبادل اطلاعات
سرور ذخیره سازی یا مشتری مشتری
ابطال نیاز به حالت (به عنوان مثال ، لیست سیاه) دشوار است (نیاز به انقضا توکن دارد)
OAUTH با JWT: چگونه آنها با هم کار می کنند
در بیشتر سیستم های مدرن ، OAuth 2.0 JWT را به عنوان نشانه های دسترسی صادر می کند. این قدرت نمایندگی OAUTH را با ماهیت بی تابعیت JWT ترکیب می کند.

جریان مثال:
ورود کاربر از طریق Google (OAUTH)
Google یک نشانه دسترسی (JWT) را صادر می کند
برنامه شما JWT را تأیید و تجزیه می کند
به کاربر بر اساس ادعاهای توکن دسترسی پیدا می کند
مثال در دنیای واقعی: استفاده از OAUTH با JWT در Node.js
در اینجا یک مثال اساسی با استفاده از node.js ، express و passport.js با Google OAuth و JWT آورده شده است.

  1. بسته های مورد نیاز را نصب کنید
npm install express passport passport-google-oauth20 jsonwebtoken dotenv

حالت تمام صفحه را وارد کنید

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

  1. تنظیم استراتژی OAUTH
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const jwt = require('jsonwebtoken');

passport.use(new GoogleStrategy({
  clientID: process.env.GOOGLE_CLIENT_ID,
  clientSecret: process.env.GOOGLE_CLIENT_SECRET,
  callbackURL: "/auth/google/callback"
}, (accessToken, refreshToken, profile, done) => {
  const token = jwt.sign({
    id: profile.id,
    name: profile.displayName
  }, process.env.JWT_SECRET, { expiresIn: '1h' });

  return done(null, token);
}));

حالت تمام صفحه را وارد کنید

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

  1. ادغام برنامه را بیان کنید
const express = require('express');
const passport = require('passport');
require('./auth');

const app = express();

app.get('/auth/google', passport.authenticate('google', {
  scope: ['profile']
}));

app.get('/auth/google/callback', 
  passport.authenticate('google', { session: false }),
  (req, res) => {
    res.send(`Your token: ${req.user}`);
  }
);

app.listen(3000, () => console.log('Server running on http://localhost:3000'));

حالت تمام صفحه را وارد کنید

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

تأیید JWT در دروازه API

const jwt = require('jsonwebtoken');

function verifyJWT(req, res, next) {
  const token = req.headers.authorization?.split(' ')[1];
  if (!token) return res.sendStatus(403);

  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    req.user = decoded;
    next();
  } catch {
    res.sendStatus(401);
  }
}

حالت تمام صفحه را وارد کنید

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

ملاحظات امنیتی
• JWT
o همیشه از https برای جلوگیری از رهگیری توکن استفاده کنید
o زمان انقضا کوتاه را تعیین کنید
o از ذخیره داده های حساس در نشانه خودداری کنید
• اوتوت
o همیشه uris تغییر مسیر را تأیید کنید
o ابطال مناسب توکن را پیاده سازی کنید
o استفاده از PKCE را برای مشتریان عمومی در نظر بگیرید
منابع
• راهنمای نهایی اجرای احراز هویت در برنامه های جاوا اسکریپت
• OAUTH 2.0 – RFC 6749
• jwt.io – مقدمه و اشکال زدایی
• مشخصات اتصال OpenID
• AUTH0 – JWT در مقابل OAUTH

https://www.nilebits.com/blog/2025/05/oauth-jwt-everything-need-wanky-2025/

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

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

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

دکمه بازگشت به بالا