نظرة عامة على مكتبات عميل OAuth لجافا سكريبت (Node.js)
OAuth (التفويض المفتوح) هو بروتوكول تفويض مفتوح يسمح بمنح طرف ثالث وصولاً محدوداً إلى موارد المستخدم دون نقل اسم المستخدم وكلمة المرور. في نظام Node.js البيئي، توجد عدة مكتبات ناضجة تنفذ OAuth 2.0 و OAuth 1.0a. في هذه المقالة، سنستعرض ثلاثة من أشهر الحلول: simple-oauth2 و oauth4webapi و Passport.js مع استراتيجياته. ستتعلم كيفية اختيار الأداة المناسبة وكيفية دمجها في مشروعك.
1. simple-oauth2 — عميل OAuth 2.0 شامل
simple-oauth2 هي مكتبة خفيفة الوزن توفر واجهة برمجة تطبيقات (API) نظيفة للعمل مع OAuth 2.0. تدعم جميع أنواع المنح الرئيسية (رمز التفويض، بيانات اعتماد العميل، كلمة المرور، رمز التحديث). مثالية لتطبيقات الخادم حيث تحتاج إلى تحكم كامل في العملية.
التثبيت
npm install simple-oauth2مثال: التفويض عبر GitHub
const express = require('express');const simpleOAuth2 = require('simple-oauth2');const app = express();
const config = { client: { id: 'معرف_العميل_الخاص_بك', secret: 'سر_العميل_الخاص_بك' }, auth: { tokenHost: 'https://github.com', tokenPath: '/login/oauth/access_token', authorizePath: '/login/oauth/authorize' }};
const oauth2 = new simpleOAuth2.ClientCredentials(config);
// مسار بدء التفويضapp.get('/auth/github', (req, res) => { const authorizationUri = oauth2.authorizeURL({ redirect_uri: 'http://localhost:3000/callback', scope: 'user:email' }); res.redirect(authorizationUri);});
// مسار الاستدعاءapp.get('/callback', async (req, res) => { const { code } = req.query; try { const result = await oauth2.getToken({ code, redirect_uri: 'http://localhost:3000/callback' }); const accessToken = oauth2.createToken(result); console.log('رمز الوصول:', accessToken.token.access_token); res.send('تم التفويض بنجاح!'); } catch (error) { console.error('خطأ في الحصول على الرمز', error); res.status(500).send('خطأ في التفويض'); }});
app.listen(3000, () => console.log('الخادم يعمل على المنفذ 3000'));2. oauth4webapi — المعيار الحديث
oauth4webapi هو تنفيذ لأحدث مواصفات OAuth 2.0 و OpenID Connect. المكتبة ليس لها تبعيات خارجية، وتدعم PKCE (إثبات المفتاح لتبادل الكود) والعمل مع JWK (مفاتيح الويب JSON). موصى بها للمشاريع الجديدة حيث تكون الأمان والامتثال للمعايير مهمين.
التثبيت
npm install oauth4webapiمثال: التفويض مع PKCE
const express = require('express');const { AuthorizationServer, Client, generateCodeVerifier, generateCodeChallenge } = require('oauth4webapi');const app = express();
// تكوين خادم التفويض (Google)const issuer = new URL('https://accounts.google.com');const server = new AuthorizationServer(issuer);const client = new Client({ client_id: 'معرف_العميل_الخاص_بك', client_secret: 'سر_العميل_الخاص_بك', redirect_uris: ['http://localhost:3000/callback']});
app.get('/auth/google', async (req, res) => { const codeVerifier = generateCodeVerifier(); const codeChallenge = await generateCodeChallenge(codeVerifier); // حفظ codeVerifier في الجلسة req.session.codeVerifier = codeVerifier;
const authorizationUrl = new URL(server.authorization_endpoint); authorizationUrl.searchParams.set('client_id', client.client_id); authorizationUrl.searchParams.set('redirect_uri', client.redirect_uris[0]); authorizationUrl.searchParams.set('response_type', 'code'); authorizationUrl.searchParams.set('scope', 'openid profile email'); auth