مصادقة Node.js Express: المفاهيم والأساليب والأمثلة

المصادقة هي جانب أساسي من تأمين تطبيقات الويب، مما يضمن للمستخدمين الوصول فقط إلى الموارد والبيانات المصرح لهم بها. في نظام Node.js، يُعتبر Express إطار عمل شائع يسهل تنفيذ المصادقة.

Amir Hassan

Amir Hassan

27 مايو 2025

مصادقة Node.js Express: المفاهيم والأساليب والأمثلة

المصادقة هي جانب أساسي من جوانب تأمين تطبيقات الويب، مما يضمن أن المستخدمين يمكنهم الوصول فقط إلى الموارد والبيانات المخول لهم الوصول إليها. في نظام Node.js البيئي، يعتبر Express إطار عمل شائع يسهل تنفيذ المصادقة. ستتناول هذه المدونة مفاهيم المصادقة الأساسية، وطرق المصادقة الشائعة المستخدمة في تطبيقات Node.js وExpress، وتقدم أمثلة عملية لمساعدتك على البدء.

مقدمة في مصادقة Node.js Express

تشير مصادقة Node.js Express إلى الطرق والممارسات المستخدمة للتحقق من هوية المستخدمين الذين يصلون إلى تطبيق Node.js المبني بإطار عمل Express. تضمن المصادقة أن المستخدمين المصرح لهم فقط يمكنهم الوصول إلى موارد معينة، مما يوفر الأمان ويحمي البيانات الحساسة.

💡
Apidog ليست مجرد منصة قوية لتطوير واختبار واجهات برمجة التطبيقات؛ بل توفر أيضًا دعمًا واسعًا للتعامل مع التفويض. تعد هذه الميزة حيوية لضمان أمان واجهات برمجة التطبيقات وأنها متاحة فقط للمستخدمين المصرح لهم.
زر

المصادقة مقابل التفويض

المصادقة غير الحالة مقابل المصادقة الحالة

طرق المصادقة الشائعة في Node.js Express

1. المصادقة الأساسية

2. المصادقة المعتمدة على الرمز (JWT)

3. المصادقة المعتمدة على الجلسة

4. OAuth2

5. تسجيل الدخول عبر الشبكات الاجتماعية

6. المصادقة متعددة العوامل (MFA)

7. مصادقة مفتاح API

8. مصادقة LDAP

9. مصادقة SAML

كيف تختار طرق المصادقة الصحيحة Node.js Express؟

اختيار الطريقة الصحيحة للمصادقة لتطبيقك في Node.js Express يعتمد على عدة عوامل، بما في ذلك متطلبات الأمان، تجربة المستخدم، وحالات الاستخدام المحددة لتطبيقك. إليك دليل حول متى تستخدم كل طريقة للمصادقة:

1. المصادقة الأساسية

متى تستخدمها:

الإيجابيات:

السلبيات:

2. المصادقة المعتمدة على الرمز (JWT)

متى تستخدمها:

الإيجابيات:

السلبيات:

3. المصادقة المعتمدة على الجلسة

متى تستخدمها:

الإيجابيات:

السلبيات:

4. OAuth2

متى تستخدمها:

الإيجابيات:

السلبيات:

5. تسجيل الدخول عبر الشبكات الاجتماعية

متى تستخدمها:

الإيجابيات:

السلبيات:

6. المصادقة متعددة العوامل (MFA)

متى تستخدمها:

الإيجابيات:

السلبيات:

7. مصادقة مفتاح API

متى تستخدمها:

الإيجابيات:

السلبيات:

8. مصادقة LDAP

متى تستخدمها:

الإيجابيات:

السلبيات:

9. مصادقة SAML

متى تستخدمها:

الإيجابيات:

السلبيات:

ملخص موجز لاختيار طرق المصادقة

اختيار الطريقة الصحيحة للمصادقة لتطبيقك في Node.js Express يتطلب فهم الخيارات المتاحة وتقييمها مقابل متطلبات تطبيقك المحددة.

المصادقة الأساسية: سريعة وبسيطة للتطبيقات غير الحرجة.

المصادقة المعتمدة على الرمز (JWT): مثالية لتطبيقات SPAs، وتطبيقات الهاتف المحمول، والمايكروسرفيس.

المصادقة المعتمدة على الجلسة: مناسبة للتطبيقات الويب التقليدية.

OAuth2: الأفضل للتكامل مع الطرف الثالث والوصول المفوض.

تسجيل الدخول عبر الشبكات الاجتماعية: رائع للتطبيقات الموجهة للمستهلك لتحسين تجربة المستخدم.

المصادقة متعددة العوامل (MFA): أساسية لتطبيقات الأمان العالي.

مصادقة مفتاح API: مفيدة للتواصل بين الخدمات وواجهات برمجة التطبيقات العامة.

مصادقة LDAP: مناسبة لتطبيقات الشركات ذات إدارة المستخدمين المركزية.

مصادقة SAML: تُستخدم لتسجيل الدخول الموحد في الشركات وأنظمة الهوية المشتركة.

اختيار الطريقة الصحيحة يعتمد على الاحتياجات المحددة لتطبيقك ومتطلبات الأمان واعتبارات تجربة المستخدم.

أمثلة على مصادقة Node.js Express

المصادقة جزء حاسم من أي تطبيق ويب، مما يضمن أن المستخدمين يمكنهم الوصول إلى الموارد بأمان. دعنا نستعرض أمثلة متنوعة حول كيفية تنفيذ المصادقة في تطبيق Node.js Express. سنغطي بعض من أكثر الأساليب شيوعًا: JWT (JSON Web Tokens)، المصادقة المعتمدة على الجلسة، OAuth2، ومفاتيح API.

1. مصادقة JWT (JSON Web Tokens)

JWT هي طريقة مصادقة غير حالة تسمح لك بنقل المعلومات بأمان بين الأطراف ككائن JSON. يمكن التحقق من هذه المعلومات والثقة بها لأنها موقعة رقميًا.

خطوات التنفيذ:

الخطوة 1: إعداد مشروعك

أولاً، أنشئ مشروعًا جديدًا وثبت الاعتماديات اللازمة:

mkdir jwt-auth-example
cd jwt-auth-example
npm init -y
npm install express jsonwebtoken body-parser bcryptjs

الخطوة 2: إنشاء خادم Express

أنشئ ملف app.js وأعد إعداد خادم Express أساسي:

const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const bcrypt = require('bcryptjs');

const app = express();
app.use(bodyParser.json());

const SECRET_KEY = 'your_jwt_secret';

// بيانات مستخدم وهمية
const users = [{ id: 1, username: 'user1', password: bcrypt.hashSync('password1', 8) }];

app.post('/login', (req, res) => {
  const { username, password } = req.body;
  const user = users.find(u => u.username === username);
  if (user && bcrypt.compareSync(password, user.password)) {
    const token = jwt.sign({ id: user.id, username: user.username }, SECRET_KEY, { expiresIn: '1h' });
    res.json({ token });
  } else {
    res.status(401).send('بيانات اعتماد غير صالحة');
  }
});

const authenticateJWT = (req, res, next) => {
  const token = req.headers.authorization;
  if (token) {
    jwt.verify(token, SECRET_KEY, (err, user) => {
      if (err) {
        return res.sendStatus(403);
      }
      req.user = user;
      next();
    });
  } else {
    res.sendStatus(401);
  }
};

app.get('/protected', authenticateJWT, (req, res) => {
  res.send(`مرحبًا ${req.user.username}، لقد وصلت إلى مسار محمي!`);
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`الخادم يعمل على المنفذ ${PORT}`);
});

2. المصادقة المعتمدة على الجلسة

تستند المصادقة المعتمدة على الجلسة إلى تخزين بيانات الجلسة على جانب الخادم. هذه الطريقة تعتمد على الحالة وتستخدم عادةً في تطبيقات الويب التقليدية.

خطوات التنفيذ:

الخطوة 1: إعداد مشروعك

قم بإنشاء مشروع جديد وتثبيت الاعتماديات اللازمة:

mkdir session-auth-example
cd session-auth-example
npm init -y
npm install express express-session body-parser bcryptjs

الخطوة 2: إنشاء خادم Express

أنشئ ملف app.js وأعد إعداد خادم Express أساسي:

const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const bcrypt = require('bcryptjs');

const app = express();
app.use(bodyParser.json());
app.use(session({ secret: 'your_session_secret', resave: false, saveUninitialized: true }));

const users = [{ id: 1, username: 'user1', password: bcrypt.hashSync('password1', 8) }];

app.post('/login', (req, res) => {
  const { username, password } = req.body;
  const user = users.find(u => u.username === username);
  if (user && bcrypt.compareSync(password, user.password)) {
    req.session.userId = user.id;
    res.send('تسجيل الدخول');
  } else {
    res.status(401).send('بيانات اعتماد غير صالحة');
  }
});

const authenticateSession = (req, res, next) => {
  if (req.session.userId) {
    next();
  } else {
    res.sendStatus(401);
  }
};

app.get('/protected', authenticateSession, (req, res) => {
  const user = users.find(u => u.id === req.session.userId);
  res.send(`مرحبًا ${user.username}، لقد وصلت إلى مسار محمي!`);
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`الخادم يعمل على المنفذ ${PORT}`);
});

3. مصادقة OAuth2

OAuth2 هو أسلوب مصادقة أكثر تعقيدًا يسمح للتطبيقات الخارجية بالوصول إلى موارد المستخدم دون كشف بيانات اعتماد المستخدم. يُستخدم عادةً لتسجيل الدخول عبر الشبكات الاجتماعية والتكامل مع خدمات أخرى.

خطوات التنفيذ:

يتضمن تنفيذ OAuth2 عادةً استخدام مكتبة أو إطار عمل يتعامل مع تدفق OAuth2. لأغراض البساطة، سنستخدم مكتبة passport مع استراتيجية مثل passport-google-oauth20.

الخطوة 1: إعداد مشروعك

قم بإنشاء مشروع جديد وتثبيت الاعتماديات اللازمة:

mkdir oauth2-auth-example
cd oauth2-auth-example
npm init -y
npm install express passport passport-google-oauth20 express-session

الخطوة 2: إنشاء خادم Express

أنشئ ملف app.js وأعد إعداد خادم Express أساسي:

const express = require('express');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const session = require('express-session');

const app = express();

app.use(session({ secret: 'your_session_secret', resave: false, saveUninitialized: true }));
app.use(passport.initialize());
app.use(passport.session());

passport.use(new GoogleStrategy({
  clientID: 'YOUR_GOOGLE_CLIENT_ID',
  clientSecret: 'YOUR_GOOGLE_CLIENT_SECRET',
  callbackURL: 'http://localhost:3000/auth/google/callback'
}, (accessToken, refreshToken, profile, done) => {
  // في تطبيق حقيقي، يجب عليك حفظ معلومات الملف الشخصي في قاعدة بياناتك
  return done(null, profile);
}));

passport.serializeUser((user, done) => {
  done(null, user);
});

passport.deserializeUser((obj, done) => {
  done(null, obj);
});

app.get('/auth/google', passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login'] }));

app.get('/auth/google/callback', passport.authenticate('google', { failureRedirect: '/' }), (req, res) => {
  res.redirect('/protected');
});

const ensureAuthenticated = (req, res, next) => {
  if (req.isAuthenticated()) {
    return next();
  }
  res.redirect('/');
};

app.get('/protected', ensureAuthenticated, (req, res) => {
  res.send(`مرحبًا ${req.user.displayName}، لقد وصلت إلى مسار محمي!`);
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`الخادم يعمل على المنفذ ${PORT}`);
});

4. مصادقة مفتاح API

مصداقية مفتاح API بسيطة وغالبًا ما تُستخدم للتواصل من خادم إلى خادم. يتضمن تمرير مفتاح مع كل طلب للتحقق من العميل.

خطوات التنفيذ

الخطوة 1: إعداد مشروعك

قم بإنشاء مشروع جديد وتثبيت الاعتماديات اللازمة:

mkdir api-key-auth-example
cd api-key-auth-example
npm init -y
npm install express

الخطوة 2: إنشاء خادم Express

إنشاء ملف app.js وإعداد خادم Express أساسي:

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

const API_KEY = 'your_api_key';

const authenticateApiKey = (req, res, next) => {
  const apiKey = req.headers['x-api-key'];
  if (apiKey && apiKey === API_KEY) {
    next();
  } else {
    res.sendStatus(401);
  }
};

app.get('/protected', authenticateApiKey, (req, res) => {
  res.send('تم منح الوصول إلى المسار المحمي');
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`الخادم يعمل على المنفذ ${PORT}`);
});

من المصادقة غير الحالة باستخدام JWT إلى المصادقة التقليدية المعتمدة على الجلسة وOAuth2 للتكامل مع الطرف الثالث، لديك مجموعة متنوعة من الطرق للاختيار من بينها بناءً على متطلبات تطبيقك. سيساعدك فهم هذه الأساليب وتنفيذها بشكل صحيح في بناء تطبيقات آمنة وقابلة للتوسع.

10 أفضل الممارسات لمصادقة Node.js Express

يتطلب تنفيذ المصادقة في تطبيق Node.js Express اعتبارات دقيقة لضمان الأمان، القابلية للتوسع، وسهولة الاستخدام. إليك بعض أفضل الممارسات التي يجب اتباعها عند التعامل مع المصادقة في تطبيقات Node.js Express:

1. استخدام تجزئة كلمة مرور قوية

const bcrypt = require('bcryptjs');

const hashPassword = async (password) => {
    const salt = await bcrypt.genSalt(10);
    return await bcrypt.hash(password, salt);
};

2. تأمين رموز JWT

const jwt = require('jsonwebtoken');
const SECRET_KEY = process.env.SECRET_KEY;

const token = jwt.sign({ userId: user.id }, SECRET_KEY, { expiresIn: '1h' });

3. استخدام HTTPS

4. تحقق من المدخلات

const { body, validationResult } = require('express-validator');

app.post('/register', [
    body('email').isEmail(),
    body('password').isLength({ min: 6 })
], (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
        return res.status(400).json({ errors: errors.array() });
    }
    // تابع مع التسجيل
});

5. تنفيذ تحديد معدل

const rateLimit = require('express-rate-limit');

const limiter = rateLimit({
    windowMs: 15 * 60 * 1000, // 15 دقيقة
    max: 100 // حد كل IP إلى 100 طلب لكل windowMs
});

app.use('/login', limiter);

6. تخزين الرموز بأمان

7. تنفيذ إدارة جلسات صحيحة

8. استخدم middleware للمسارات المحمية

const authenticateJWT = (req, res, next) => {
    const token = req.headers.authorization;

    if (!token) {
        return res.sendStatus(401);
    }

    jwt.verify(token, SECRET_KEY, (err, user) => {
        if (err) {
            return res.sendStatus(403);
        }

        req.user = user;
        next();
    });
};

app.get('/protected', authenticateJWT, (req, res) => {
    res.send('هذه مسار محمي');
});

9. رصد وتسجيل أحداث المصادقة

10. تحديث الاعتماديات دوريًا

الاستفادة من Apidog لاختبار واجهات برمجة التطبيقات باستخدام أساليب المصادقة في Node.js Express

Apidog هي منصة شاملة لتطوير واجهات برمجة التطبيقات تسهل عملية التطوير بالكامل. تحتوي على خيارات مصادقة robust مدمجة، مما يسمح للمطورين باختبار نقاط نهاية واجهة برمجة التطبيقات بطرق متعددة بما في ذلك مفتاح API، رمز Bearer، JWT، مصادقة أساسية، مصادقة Digest، OAuth 1.0، OAuth 2.0، مصادقة Hawk، NTLM، وAkamai EdgeGrid. وهذا يمكّن مطوري واجهات برمجة التطبيقات من التحقق تمامًا من استراتيجيات المصادقة المطبقة في واجهات برمجة التطبيقات الخاصة بهم.

auth methods for APIs

الخاتمة

يعد تنفيذ المصادقة في تطبيق Node.js Express أمرًا حاسمًا لضمان أمان وسلامة تطبيق الويب الخاص بك. من خلال فهم أساليب المصادقة المختلفة، من المصادقة الأساسية وJWT إلى OAuth2 وLDAP، واتباع أفضل الممارسات مثل استخدام تجزئة كلمة مرور قوية، وتأمين رموز JWT، والتحقق من المدخلات، يمكنك إنشاء أنظمة مصادقة قوية وآمنة. تعزز أدوات مثل Apidog أيضًا قدرتك على اختبار والتحقق من هذه الأساليب للمصادقة، مما يضمن أنها تعمل كما هو متوقع. من خلال اختيار وتنفيذ استراتيجية المصادقة الصحيحة لاحتياجات تطبيقك، يمكنك تقديم تجربة مستخدم آمنة وسلسة، وحماية البيانات الحساسة والموارد بشكل فعال.

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات