إزاي OAuth بيشتغل
يونيو 29, 2025إزاي OAuth بيشتغل؟
OAuth هو بروتوكول بيخلّي التطبيقات تقدر تدخل على بياناتك بطريقة آمنة من غير ما تدّيهم الباسورد بتاعك. زي مثلًا لو حبيت تطبيق ينشر بوستات عندك على تويتر.
🔐 يعني إيه OAuth؟
يعني تقدر تدي إذن لتطبيق يستخدم بياناتك زي الإيميل أو البروفايل من غير ما يعرف الباسورد. المستخدم بيوافق، والتطبيق بياخد صلاحيات محددة.
🔁 الخطوة ١: طلب التفويض
بتبعت المستخدم على صفحة موافقة:
const params = {
response_type: 'code',
client_id: 'client-id-بتاعك',
redirect_uri: 'https://app.com/callback',
scope: 'email profile',
state: 'كود-عشوائي'
};
const url = 'https://auth.example.com/oauth/authorize?' + new URLSearchParams(params);
// location.href = url;
🔁 الخطوة ٢: استلام الكود
بعد الموافقة، المستخدم بيرجع للتطبيق ومعاه كود مؤقت في الرابط.
🛠️ الخطوة ٣: تبادل الكود بتوكن
const response = await fetch('https://auth.example.com/oauth/token', {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({
grant_type: 'authorization_code',
code: 'الكود',
redirect_uri: 'https://app.com/callback',
client_id: 'العميل-id',
client_secret: 'السر'
})
});
const data = await response.json();
const accessToken = data.access_token;
💡 إيه هو PKCE؟
PKCE هو طريقة لحماية التطبيقات اللي مش قادرة تحفظ أسرار، زي تطبيقات الموبايل.
// في الواجهة
const codeVerifier = generateRandomString();
const codeChallenge = await sha256(codeVerifier);
sessionStorage.setItem('verifier', codeVerifier);
const params = {
response_type: 'code',
code_challenge_method: 'S256',
code_challenge: codeChallenge
};
📢 ملخص
- OAuth بيوفر طريقة آمنة للتفويض بدون كلمة سر.
- اتأكد من قيمة
stateعشان تمنع الاختراق. - PKCE لازم لتطبيقات الموبايل والـSPA.
المدونة
يونيو 03, 2025
لارافيل 12.16.0 - مميزات جديدة للمطورين 1. قاعدات تحقق جديدة: in_array_keys دلوقتي تقدر تتحقق إن الأراي فيه على الأقل مفتاح واحد من اللي انت محددهم...
يوليو 31, 2025
Hook useCallback في React يُستخدم لإنشاء نسخة ثابتة من دالة (callback) بحيث لا يُعاد إنشاؤها إلا إذا تغيرت الـ dependencies المحددة. الهدف الأساسي م...
يونيو 26, 2025
دليل للأنيميشن المتحركة بالسكّول بـ CSS دلوقتي تقدر تربط الأنيميشن بتاعتك بـ السكّول من غير جافاسكريبت — كله CSS بحت. 1. التلات مكونات بتوع...
يوليو 01, 2025
🚫 وقّف نسخ الكود! لو عندك نفس المنطق في كذا Model أو Controller زي Slug أو Logging، Traits في Laravel هتوفر عليك تعب الكتابة والتكرار. 1. إيه هو...
يونيو 30, 2025
أحدث مميزات ECMAScript 2025 في 25 يونيو 2025، تم اعتماد ES2025 رسميًا. الإضافات الجاية هتسهل عليك كتابة الكود: 1. 📦 Import Attributes و JSON Module...
يوليو 28, 2025
🚀 الجديد في React Native 0.80 بالتفصيل الإصدار React Native 0.80 يعتبر نقطة تحول حقيقية في عالم تطوير تطبيقات الموبايل باستخدام React Native. التح...