عميل OAuth لجافا سكريبت (Node.js): نظرة عامة وأمثلة استخدام

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

نظرة عامة على مكتبات عميل 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

توصيات