تنفيذ مصادقة رمز الحامل في Node.js مع Express

تأمين النقاط النهائية في واجهات برمجة التطبيقات RESTful والخدمات المصغرة أمر بالغ الأهمية. يُعد مصادقة رمز الحامل طريقة شائعة لضمان الوصول المصرح به إلى الموارد. يتناول هذا المدونة خطوات الإعداد الأساسية وأفضل الممارسات للأمان القوي.

Amir Hassan

Amir Hassan

27 مايو 2025

تنفيذ مصادقة رمز الحامل في Node.js مع Express

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

💡
Apidog هي أداة قوية تهدف إلى تعزيز كفاءة تطوير واجهات برمجة التطبيقات من خلال تقديم مجموعة شاملة من الميزات لإنشاء واختبار وتوثيق واجهات برمجة التطبيقات. كما أنه يوفر أدوات مريحة للحصول على رموز المصادقة على واجهة برمجة التطبيقات من جميع الأنواع. إنها مجانية! جربها اليوم!
button

ما هي مصادقة Bearer Token؟

تتضمن مصادقة Bearer Token إصدار رمز عند مصادقة المستخدم، والذي يجب على العميل تضمينه في رأس Authorization للطلبات اللاحقة. يعمل هذا الرمز كـ "حامل" للبيانات، مما يعني أن أي شخص يمتلك الرمز يمكنه الوصول إلى الموارد المرتبطة. تعتبر رموز JSON Web (JWT) شكلًا شائعًا من أشكال Bearer Tokens نظرًا لطبيعتها غير الحالة ومرونتها.

الخطوة 1: إعداد تطبيق Node.js و Express الخاص بك

قبل أن نتعمق في تنفيذ Bearer Token، دعنا نبدأ بإعداد تطبيق Node.js و Express أساسي. سنبدأ بتهيئة مشروع جديد وتثبيت الاعتمادات اللازمة.

1. تهيئة مشروع جديد:

mkdir express-bearer-token && cd express-bearer-token
npm init -y

2. تثبيت الحزم المطلوبة:

npm install express body-parser jsonwebtoken

3. إعداد خادم أساسي:

قم بإنشاء ملف index.js وإعداد خادم Express:

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

const app = express();
const PORT = 3000;
const SECRET_KEY = 'your_secret_key';

app.use(bodyParser.json());

app.get('/', (req, res) => {
    res.send('مرحبًا بكم في درس مصادقة Bearer Token!');
});

app.listen(PORT, () => {
    console.log(`الخادم يعمل على http://localhost:${PORT}`);
});

الخطوة 2: إنشاء JWT

أولاً وقبل كل شيء، تحتاج إلى إنشاء نقطة نهاية لتسجيل دخول المستخدم لتوليد وإرسال رمز JWT. لتبسيط الأمر، سنستخدم مستخدمًا وهميًا.

1. إضافة مسار تسجيل الدخول:

const users = {
    user1: { username: 'user1', password: 'password1' }  // مستخدم وهمي
};

app.post('/login', (req, res) => {
    const { username, password } = req.body;
    const user = users[username];

    if (user && user.password === password) {
        const token = jwt.sign({ username }, SECRET_KEY, { expiresIn: '1h' });
        res.json({ token });
    } else {
        res.status(401).send('بيانات الاعتماد غير صحيحة');
    }
});

الخطوة 3: حماية المسارات باستخدام Bearer Token

لحماية بعض المسارات، ستحتاج إلى وسيط يتحقق من Bearer Token من الطلبات الواردة.

1. إنشاء وسيط للمصادقة:

قم بإنشاء دالة وسيط للتحقق من رمز Bearer. سيتحقق هذا الوسيط من رأس Authorization في الطلبات الواردة ويُحقق من الرمز باستخدام مفتاح سري.

const authenticateToken = (req, res, next) => {
    const authHeader = req.headers['authorization'];
    const token = authHeader && authHeader.split(' ')[1];  // Bearer <token>

    if (token == null) return res.sendStatus(401);  // لا يوجد رمز

    jwt.verify(token, SECRET_KEY, (err, user) => {
        if (err) return res.sendStatus(403);  // رمز غير صالح

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

2. إنشاء المسارات:

قم بإنشاء مسارات لتسجيل الدخول ومسار محمي يتطلب المصادقة.

const users = [
  { id: 1, username: 'user1', password: 'password1' },
  { id: 2, username: 'user2', password: 'password2' }
];

app.post('/login', (req, res) => {
  const { username, password } = req.body;
  const user = users.find(u => u.username === username && u.password === password);

  if (!user) {
    return res.status(400).send('اسم المستخدم أو كلمة المرور غير صحيحة');
  }

  const token = jwt.sign({ username: user.username }, 'your_jwt_secret_key', { expiresIn: '1h' });
  res.json({ token });
});

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

الخطوة 4: اختبار التنفيذ

قم بتشغيل الخادم الخاص بك:

node app.js

لاختبار التنفيذ:

  1. تسجيل الدخول: أرسل طلب POST إلى /login مع جسم JSON يحتوي على اسم مستخدم و كلمة مرور صحيحتين. إذا كانت بيانات الاعتماد صحيحة، فستستلم JWT.
  2. الوصول إلى المسار المحمي: أرسل طلب GET إلى /protected مع رأس Authorization مضاف إليه Bearer <your_token>. إذا كان الرمز صالحًا، فستتمكن من الوصول إلى المسار المحمي.

اختبار مصادقة Bearer Token لواجهة برمجة التطبيقات باستخدام Apidog

تعتبر مصادقة Bearer token طريقة شائعة تستخدم في تطبيقات الويب لتأمين طلبات واجهة برمجة التطبيقات. تبسط Apidog، وهي أداة واجهة برمجة التطبيقات متعددة الاستخدامات، هذه العملية، مما يسمح للمطورين بمصادقة طلبات واجهة برمجة التطبيقات بسهولة. إليك دليل خطوة بخطوة حول كيفية اختبار مصادقة Bearer Token لواجهة برمجة التطبيقات باستخدام Apidog.

الخطوة 1: إعداد Apidog

  1. تحميل وتثبيت Apidog: قم بتحميل Apidog واتبع تعليمات التثبيت لنظام التشغيل الخاص بك.
  2. إنشاء مشروع جديد: افتح Apidog وأنشئ مشروعًا جديدًا يمكنك من خلاله إدارة طلبات واجهة برمجة التطبيقات والاختبارات الخاصة بك.

الخطوة 2: إضافة رمز Bearer إلى طلب واجهة برمجة التطبيقات

1. حدد مصادقة Bearer Token: في لوحة التحكم بالمشروع، أنشئ طلب واجهة برمجة التطبيقات جديد. انتقل إلى "التوثيق"، واختر "Bearer Token" من القائمة المنسدلة.

2. أدخل الرمز: أدخل قيمة الرمز الخاصة بك مباشرة. تضاف Apidog بشكل تلقائي كلمة "Bearer" كبادئة للطلب الفعلي.

3. إرسل الطلب: بعد إعداد Bearer token، أرسل الطلب. ستتضمن Apidog الرمز في رأس التفويض، مما يسمح لك بالوصول إلى الموارد المحمية.

الخطوة 3: التحقق من الاستجابة

بعد إرسال الطلب، تحقق من الاستجابة للتأكد من أن استدعاء واجهة برمجة التطبيقات كان ناجحًا. عادةً ما تشير حالة 200 OK إلى مصادقة ناجحة.

إرسال طلب واجهة برمجة التطبيقات مع رمز bearer في Apidog.

لماذا اختيار Bearer Token لمصادقة واجهة برمجة التطبيقات؟

تعتبر مصادقة Bearer token نموذجًا مُفضلًا لمصادقة واجهة برمجة التطبيقات بفضل العديد من المزايا:

  1. عدم الحفاظ على حالة: يسمح رموز Bearer للخادم بمصادقة الطلبات دون الحفاظ على حالة الجلسة، مما يسهل توسيع التطبيقات.
  2. البساطة: الرموز سهلة التنفيذ والاستخدام، وغالبًا ما يتم تضمينها في رأس HTTP Authorization.
  3. الأمان: يمكن تشفير الرموز ولها أوقات انتهاء، مما يعزز الأمان.
  4. التوافق: رموز Bearer موحدة ويمكن استخدامها عبر منصات وخدمات مختلفة، مما يعزز التوافق.

تجعل هذه الفوائد رموز Bearer خيارًا قويًا ومرنًا لتأمين واجهات برمجة التطبيقات.

أفضل الممارسات لأمان Bearer Token

1. استخدام مفاتيح سرية قوية:

تأكد من أن مفتاحك السري المستخدم في توقيع JWTs معقد ومخزن بشكل آمن. تجنب إدراجه بشكل مباشر في شفرتك — اعتبر استخدام متغيرات البيئة.

2. انتهاء صلاحية الرمز:

حدد دائمًا وقت انتهاء للرموز لتقليل مخاطر سوء الاستخدام إذا تم سرقتها. قم بتدوير الرموز وإبطالها بانتظام.

3. HTTPS:

استخدم HTTPS لحماية البيانات أثناء النقل، بما في ذلك رموز Bearer، مما يضمن التشفير بين العميل والخادم.

4. تخزين آمن:

على جانب العميل، قم بتخزين الرموز بشكل آمن. غالبًا ما تكون ملفات تعريف الارتباط HTTP-only و Secure الخيار الأفضل مقارنة بالتخزين المحلي أو تخزين الجلسات.

5. تحديد معدلات الوصول والمراقبة:

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

6. إضافة الرموز المصرح بها إلى القائمة السوداء:

احتفظ بآلية لإبطال الرموز، مثل قائمة سوداء، في حال احتجت إلى إلغاء الوصول على الفور.

الخاتمة

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

الأمن هو عملية مستمرة، وعلى الرغم من أن رموز Bearer تقدم العديد من المزايا، تبقى دائمًا على اطلاع بأحدث ممارسات الأمان والتهديدات. مع هذه الأساسيات، أنت في طريقك لبناء واجهات برمجة تطبيقات آمنة وقابلة للتوسع وفعالة في Node.js باستخدام Express.

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

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