تحقيق المصادقة باستخدام Microsoft Entra ID وPassportJs على Azure
تعتبر المصادقة جزءًا أساسيًا من أي تطبيق وب، وخاصة عند العمل مع هويات المستخدمين. في هذا السياق، نجد أن استخدام Microsoft Entra ID مع أدوات مثل Passport.js يوفر لنا وسيلة قوية وفعالة لمصادقة المستخدمين. سنتناول في هذا المقال كيفية استخدام Microsoft Active Directory (AD) لتحقيق المصادقة للاستخدامات المختلفة، وفيما يلي التفاصيل.
ما هي Microsoft Entra ID؟
تعتبر Microsoft Entra ID هي منصة توفر حلول هويات متقدمة تتيح للمؤسسات إدارة هويتها بشكل مركزي. تساعد هذه المنصة على حماية التطبيقات والبيانات من الاستخدام غير المصرح به، وتوفر تكاملًا سلسًا مع تطبيقات الويب المختلفة.
طرق المصادقة عبر Microsoft Active Directory (AD)
إذا كنت ترغب في تحقيق المصادقة باستخدام Microsoft Active Directory دون الحاجة إلى توجيه المستخدمين إلى صفحة تسجيل الدخول الخاصة بـ Microsoft، فإليك بعض الحلول التي يمكن اعتمادها:
-
مصادقة LDAP
- تعتمد هذه الطريقة على استخدام بروتوكول LDAP (بروتوكول الوصول إلى الدليل خفيف الوزن) للمصادقة المباشرة مع Active Directory. يقوم المستخدم بإدخال اسم المستخدم وكلمة المرور، ويتواصل التطبيق الخاص بك مع AD عبر LDAP للتحقق من صحة هذه البيانات.
- يتطلب هذا الأسلوب اتصالاً آمنًا (على سبيل المثال، استخدام LDAPS).
-
خدمات اتحاد الدليل النشط (ADFS) مع مصادقة Windows المتكاملة
- إذا كان المستخدم جزءًا من نفس الإنترانت أو المجال، يمكنك الاستفادة من مصادقة Windows المتكاملة. تستخدم هذه الطريقة بيانات اعتماد Windows الخاصة بالمستخدم بطريقة تلقائية، مما يخفض من الحاجة إلى إدخال البيانات يدوياً.
- واجهة برمجة تطبيقات Microsoft Graph
- يمكن استخدام واجهة برمجة تطبيقات Microsoft Graph للتحقق من بيانات اعتماد المستخدم بطريقة غير مباشرة. يتم استقبال اسم المستخدم وكلمة المرور، ويستفيد التطبيق من حساب الخدمة لاستعلام Microsoft Graph والتحقق من صحة المستخدم.
إعداد المصادقة باستخدام Node.js وExpress
عند بناء تطبيق مع واجهة برمجة تطبيقات باستخدام Node.js، يمكنك استخدام مكتبة ldapjs
لتسهيل المصادقة. فيما يلي خطوات إعداد هذا النموذج:
-
تثبيت التبعية المطلوبة:
npm install express ldapjs body-parser dotenv
-
كتابة الكود الأساسي:
يمكنك إعداد خادم Express والتواصل مع خادم LDAP كما يلي:require('dotenv').config(); const Express = require('express'); const ldap = require('ldapjs'); const bodyParser = require('body-parser'); const app = Express(); app.use(bodyParser.json()); const LDAP_URL = process.env.LDAP_URL; const BASE_DN = process.env.BASE_DN; const AuthenticateUser = (username, password) => { return new Promise((resolve, reject) => { const client = ldap.createClient({ url: LDAP_URL }); const userDN = `cn=${username},${BASE_DN}`; client.bind(userDN, password, (err) => { if (err) { reject('فشلت المصادقة'); } else { resolve('نجاح المصادقة'); } client.unbind(); }); }); }; app.post('/api/login', async (req, res) => { const { username, password } = req.body; if (!username || !password) { return res.status(400).json({ error: "اسم المستخدم وكلمة المرور مطلوبان" }); } try { const result = await AuthenticateUser(username, password); res.status(200).json({ message: result }); } catch (error) { return res.status(401).json({ error }); } }); const PORT = process.env.PORT || 5000; app.listen(PORT, () => { console.log(`الخادم يعمل على المنفذ ${PORT}`); });
إعداد الواجهة الأمامية باستخدام React
يمكنك إنشاء واجهة أمامية بسيطة باستخدام React لتسهيل عملية تسجيل الدخول:
-
تثبيت التبعية:
npm install axios
-
إنشاء مكون تسجيل الدخول:
يمكنك باستخدامaxios
إرسال طلب لتسجيل الدخول على النحو التالي:import React, { useState } from 'react'; import axios from 'axios'; function App() { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [message, setMessage] = useState(''); const handleLogin = async (e) => { e.preventDefault(); try { const response = await axios.post('/api/login', { username, password }); setMessage(response.data.message); } catch (error) { setMessage(error.response?.data?.error || 'فشل تسجيل الدخول'); } }; return ( // واجهة المستخدم لتسجيل الدخول ); } export default App;
نصائح وإرشادات أمنية
تأكد من اتباع بعض الممارسات الأمنية المهمة عند التعامل مع بيانات اعتماد المستخدمين:
- دائماً استخدم بروتوكولات مشفرة مثل LDAPS أو HTTPS لضمان أمان البيانات خلال النقل.
- لا تقم بتخزين أو تسجيل كلمات المرور أولية.
- استخدم حسابات خدمة ذات امتيازات دنيا عند الاستعلام عن Active Directory.
باستخدام azure - Microsoft Entra ID authentication with PassportJs
، يمكن تحقيق تجربة مصادقة سلسة وفعالة، ما يسهل عملية إدارة الهويات داخل تطبيقات الويب، ويحول دون الحاجة إلى إعادة توجيه المستخدمين إلى صفحات تسجيل الدخول الخارجية.