المصادقة والتفويض
نفّذوا آليات مصادقة آمنة للمستخدمين (مثل JWT) وآليات تفويض لحماية نقاط نهاية خدمة الويب.
المصادقة والتفويض درس مجاني في Learn Rust Coding على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Learn Rust Coding، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
أمّنوا خدمات الويب الخاصة بكم
مرحبًا! سنتعمق في هذا الدرس في مفهومي المصادقة والتفويض، وهما مفهومان مهمان لإنشاء خدمات ويب آمنة باستخدام Rust.
ستتعلمون كيفية حماية نقاط نهاية API الخاصة بكم من خلال ضمان وصول المستخدمين المصرح لهم فقط، وبالصلاحيات المناسبة فقط.
المصادقة في مقابل التفويض
يبدو المصطلحان متشابهين، لكن لكل منهما معنى مختلف:
- المصادقة: تتحقق من هويتكم. وهي تشبه إبراز بطاقة هويتكم لدخول مبنى.
- التفويض: يحدد ما يُسمح لكم بفعله. وبعد الدخول، يتعلق الأمر بالغرف التي يمكنكم دخولها.
سننفذ المفهومين معًا لتأمين خدمات الويب الخاصة بنا المكتوبة بلغة Rust.
لماذا نؤمّن واجهات API؟
تُعد حماية نقاط نهاية API أمرًا ضروريًا لعدة أسباب:
- خصوصية البيانات: الحفاظ على أمان بيانات المستخدمين الحساسة ومنع الوصول غير المصرح به.
- سلامة النظام: منع الجهات الخبيثة من تغيير بياناتكم أو إتلافها.
- الامتثال: استيفاء المتطلبات القانونية والتنظيمية (مثل GDPR وHIPAA).
تبني طبقة أمان متينة الثقة وتحمي تطبيقكم.
رموز الويب JSON (JWTs)
من الأساليب الشائعة للمصادقة في خدمات الويب الحديثة استخدام رموز الويب JSON (JWTs)، وتُنطق "جوت".
رموز JWTs وسيلة مدمجة وآمنة للاستخدام في عناوين URL لتمثيل الادعاءات التي تُنقل بين طرفين. وغالبًا ما تُستخدم للمصادقة عديمة الحالة.
وهذا يعني أن الخادم لا يحتاج إلى تخزين معلومات الجلسة لكل مستخدم.
داخل JWT: الرأس والحمولة والتوقيع
يتكون JWT من ثلاثة أجزاء تفصل بينها نقاط:
- الرأس: يحتوي على بيانات وصفية عن الرمز، مثل نوع الرمز (JWT) وخوارزمية التوقيع (مثل HS256).
- الحمولة: تحتوي على "الادعاءات"، وهي عبارات عن كيان (عادةً ما يكون المستخدم) وبيانات إضافية.
- التوقيع: يُستخدم للتحقق من عدم العبث بالرمز. ويُنشأ بترميز الرأس والحمولة باستخدام مفتاح سري.
إنشاء JWTs والتحقق منها في Rust
لنرَ كيفية إنشاء JWT والتحقق منه باستخدام حزمة jsonwebtoken في Rust. تذكروا أنكم ستحتاجون إلى إضافة jsonwebtoken وserde (مع ميزة "derive") وchrono (مع ميزة "serde") إلى Cargo.toml.
ينشئ هذا المثال رمزًا ثم يتحقق منه مباشرةً.
use jsonwebtoken::{encode, decode, Header, EncodingKey, DecodingKey, Validation};
use serde::{Deserialize, Serialize};
use chrono::{Utc, Duration};
#[derive(Debug, Serialize, Deserialize)]
struct Claims {
sub: String, // Subject (user ID)
company: String,
exp: usize, // Expiration time
}
fn main() {
// --- Setup (requires crates: jsonwebtoken, serde, chrono) ---
let secret_key = "my_super_secret_key";
// --- 1. Generate a JWT ---
let my_claims = Claims {
sub: "user123".to_string(),
company: "CoddyKit".to_string(),
exp: (Utc::now() + Duration::minutes(10)).timestamp() as usize,
};
let token = encode(
&Header::default(),
&my_claims,
&EncodingKey::from_secret(secret_key.as_ref()),
).expect("Failed to encode token");
println!("Generated JWT:\n{}", token);
println!("\n--- Verifying the Token ---");
// --- 2. Verify the JWT ---
let validation = Validation::default();
let decoded_result = decode::<Claims>(
&token,
&DecodingKey::from_secret(secret_key.as_ref()),
&validation,
);
match decoded_result {
Ok(token_data) => {
println!("Token valid!");
println!("Subject: {}", token_data.claims.sub);
println!("Company: {}", token_data.claims.company);
},
Err(err) => println!("Token invalid: {:?}", err),
}
}التفويض: تحديد صلاحيات الوصول
بعد مصادقة المستخدم (أي بعد معرفة هويته)، يحدد التفويض الموارد أو الإجراءات المسموح له بالوصول إليها.
تشمل نماذج التفويض الشائعة ما يلي:
- التحكم في الوصول المستند إلى الأدوار (RBAC): تُسند أدوار إلى المستخدمين (مثل "admin" و"editor" و"viewer")، ويكون لكل دور صلاحيات محددة.
- التحكم في الوصول المستند إلى السمات (ABAC): يُمنح الوصول استنادًا إلى سمات المستخدم أو المورد أو البيئة.
مفهوم البرمجيات الوسيطة للتفويض
غالبًا ما يُعالج التفويض في خدمة الويب باستخدام البرمجيات الوسيطة. وهي تعليمات برمجية تعمل قبل معالج المسار الرئيسي.
تتولى البرمجيات الوسيطة ما يلي:
- استخراج هوية المستخدم الذي تمت مصادقته (مثلًا من JWT).
- التحقق من أدواره أو صلاحياته مقارنةً بصلاحيات الوصول المطلوبة لنقطة النهاية المطلوبة.
- السماح بمتابعة الطلب إذا كان مخولًا؛ وإلا، إعادة خطأ "غير مصرح" أو "محظور".
يحافظ ذلك على نظافة معالجات المسارات وتركيزها على منطق الأعمال.
اختبروا معلوماتكم
لنختبر سريعًا مدى فهمكم للمصادقة والتفويض.
مراجعة: تأمين خدمات الويب
عمل رائع! غطينا في هذا الدرس أساسيات تأمين خدمات الويب الخاصة بكم المكتوبة بلغة Rust:
- الفرق بين المصادقة (من أنتم) والتفويض (ما يمكنكم فعله).
- أهمية حماية نقاط نهاية API.
- كيفية عمل رموز الويب JSON (JWTs) للمصادقة عديمة الحالة، بما في ذلك بنيتها.
- مثال عملي في Rust لإنشاء JWTs والتحقق منها.
- مفاهيم التحكم في الوصول المستند إلى الأدوار وكيف يمكن لـالبرمجيات الوسيطة تنفيذ فحوصات التفويض.
أنتم الآن مستعدون لإنشاء تطبيقات Rust أكثر أمانًا ومتانة!
الأسئلة الشائعة
هل درس «المصادقة والتفويض» مجاني؟
نعم — نص درس «المصادقة والتفويض» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Learn Rust Coding، انتقل إلى CoddyKit PRO. تتضمن دورة Learn Rust Coding 3 دروس في المجموع.
ماذا ستتعلم في «المصادقة والتفويض»؟
نفّذوا آليات مصادقة آمنة للمستخدمين (مثل JWT) وآليات تفويض لحماية نقاط نهاية خدمة الويب. تتمرن على Learn Rust Coding مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Learn Rust Coding؟
لا تُشترط خبرة سابقة. Learn Rust Coding على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «المصادقة والتفويض»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Learn Rust Coding هذا؟
نعم. كل درس في Learn Rust Coding يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.