تعد الجلسات خيارًا شائعًا لمصادقة المستخدم عبر الويب. الجلسة هي الفترة التي يتفاعل خلالها المستخدم بنشاط مع أحد التطبيقات. يبدأ عمر الجلسة عندما يقوم المستخدم بتسجيل الدخول وينتهي عند تسجيل الخروج.
HTTP هو بروتوكول عديم الحالة ، لذلك ستحتاج غالبًا إلى تتبع نشاط المستخدم يدويًا.
على جانب الخادم من التطبيق الخاص بك ، يمكنك إنشاء قيمة فريدة ، ويفضل أن تكون آمنة مشفرة. يمكنك بعد ذلك تخزين ذلك في ملف تعريف ارتباط سيرسله العميل إلى تطبيقك في الطلبات المستقبلية ، مما يؤدي إلى إنشاء شكل من أشكال الحالة.
الجلسات في Go
يمكنك استخدام حزمة net / http لتنفيذ الجلسات ، وهناك العديد من الحزم المتاحة التي تقوم بذلك بالفعل. الأكثر شعبية هي باقة جلسات Gorilla. توفر هذه الحزمة وظيفة تخزين ملفات تعريف الارتباط والملفات جنبًا إلى جنب مع البنية التحتية الخلفية للجلسة المخصصة.
قم بتشغيل هذا الأمر في مساحة العمل Go لتثبيت حزمة جلسات Gorilla.
يذهب احصل على github.com/gorilla/sessions
في هذا البرنامج التعليمي ، ستستخدم متجر ملفات تعريف الارتباط للجلسات. ستستخدم حزمة net / http لبدء خادم ويب سيتحقق من مشكلة المستخدم ويلغي الجلسات.
إليك قائمة عمليات الاستيراد التي ستحتاج إليها لاتباع هذا البرنامج التعليمي.
يستورد (
"github.com/gorilla/sessions"
"سجل"
"net / http"
)
ال سجل الحزمة مخصصة للعمليات المتعلقة بالتسجيل بناءً على حالة مصادقة المستخدم.
تنفيذ بسيط لملفات تعريف الارتباط
ستحتاج إلى مخزن ملفات تعريف الارتباط لوظائف معالج تسجيل الدخول والخروج. بالنسبة لمتجر ملفات تعريف الارتباط ، ستحتاج إلى مفتاح سري للمصادقة.
هذه وظيفة لتنفيذ متجر ملفات تعريف الارتباط.
// تعمل وظيفة cookieStore على إنشاء مخزن ملفات تعريف الارتباط باستخدام المفتاح السري للمستخدم
funcملف تعريف الارتباط() *الجلسات.كوكي ستور {
مفتاح السر: = []بايت("super-secret-SecretKey")
cookieStore: = الجلسات. NewCookieStore (SecretKey)
تقوم // دالة بإرجاع مخزن ملفات تعريف الارتباط حتى تتمكن الوظائف الأخرى من الوصول إليه
إرجاع ملف تعريف الارتباط
}
في ال ملف تعريف الارتباط وظيفة ، متغير المفتاح السري المعلن SecretKey هو مثال على مفتاح سري. في الإنتاج ، يجب أن يكون مفتاحك السري آمنًا من الناحية المشفرة ، باستخدام حزمة التشفير على سبيل المثال. يجب عليك أيضًا تحميل السر من ملف متغيرات البيئة.
ترجع الدالة قيمة * الجلسات. كوكي ستور النوع الذي يمثل مخزن ملفات تعريف الارتباط المحمي بالمفتاح السري. ستستخدم ملف كوكي ستور تعمل في الخاص بك تسجيل الدخول و تسجيل خروج معالجات لمصادقة المستخدمين وتعيين الجلسات.
وظيفة معالج تسجيل الدخول
ستحتاج إلى التحقق مما إذا كان المستخدم قد قام بتسجيل الدخول بالفعل قبل إنشاء جلسة في وظيفة معالج تسجيل الدخول. يمكنك استخدام ال احصل على في مخزن ملفات تعريف الارتباط لاسترداد جلسة من ملف تعريف الارتباط وإضافة الجلسة إلى طلب العميل.
ال احصل على طريقة إرجاع الجلسة وخطأ يمكنك التعامل معه. إذا كنت بحاجة إلى مصادقة المستخدم ، فيمكنك المصادقة أو التفويض في ملف تسجيل الدخول معالج.
// معالج تسجيل الدخول يسترد الجلسة من متجر ملفات تعريف الارتباط
funcتسجيل الدخول(الكاتب http. ResponseWriter ، طلب * http. طلب) {
جلسة ، يخطئ: = cookieStore (). Get (request، "Cookie Name From Request")إذا يخطئ! لا شيء {
سجل. فاتالن (يخطئ)
}// اضبط مصادقة المستخدم هنا بناءً على العملية
جلسة. القيم ["حالة المصادقة"] = حقيقي
يخطئ = جلسة. حفظ (طلب ، كاتب)
إذا يخطئ! لا شيء {
إرجاع
}
}
تحتفظ خاصية القيم بالبيانات ذات الصلة بالجلسة في متجر ملفات تعريف الارتباط:
ال يحفظ طريقة حفظ الجلسة في مخزن ملفات تعريف الارتباط. في معالجاتك ، ستحتاج إلى إجراءات مصادقة أخرى لزيادة الأمان.
التحقق من حالة تسجيل دخول المستخدم
يجب أن يقوم معالج التحقق الخاص بك باسترداد الجلسة من ملف تعريف ارتباط العميل باستخدام ملفات تعريف الارتباط احصل على طريقة. ثم يمكنك استرداد الجلسة والمصادقة على المستخدم.
funccheckAuthStatus(الكاتب http. ResponseWriter ، طلب * http. طلب) {
جلسة ، يخطئ: = cookieStore (). Get (request، "Cookie Name From Request")إذا يخطئ! لا شيء {
سجل. فاتالن (يخطئ)
}موثق: = جلسة. القيم ["حالة المصادقة"]
إذا مصدق == حقيقي {
كاتب. WriteHeader (http. موافق) // كتابة رمز الحالة 200
إرجاع
} آخر {
كاتب. WriteHeader (http. StatusBadRequest) // اكتب رمز الحالة 400 http
إرجاع
}
}
ال موثق متغير يستخدم قيم لاسترداد الحالة من مخزن ملفات تعريف الارتباط. تتحقق عبارة if بعد ذلك من حالة المصادقة هذه. إذا كان تقييم ل حقيقي، يتلقى العميل 200 رمز حالة HTTP. إذا كانت حالة المصادقة غير صحيحة ، يتلقى العميل رمز حالة HTTP 400.
معالج تسجيل الخروج من الجلسة
ستكون وظيفة معالج تسجيل الخروج مشابهة جدًا لوظيفة معالج تسجيل الدخول. ستقوم بحذف جميع البيانات المتعلقة بجلسة المستخدم من مخزن ملفات تعريف الارتباط وإلغاء حالة المصادقة.
funcتسجيل خروج(الكاتب http. ResponseWriter ، طلب * http. طلب) {
جلسة ، يخطئ: = cookieStore (). Get (request، "Cookie Name From Request")إذا يخطئ! لا شيء {
إرجاع
}// إلغاء جلسة المستخدم من متجر ملفات تعريف الارتباط
جلسة. القيم ["حالة المصادقة"] = خاطئة
يخطئ = جلسة. حفظ (طلب ، كاتب)
إذا يخطئ! لا شيء {
إرجاع
}
}
ال تسجيل خروج تعمل وظيفة المعالج على إبطال حالة مصادقة جلسة المستخدم وحفظ الحالة في مخزن ملفات تعريف الارتباط.
لا تخزن البيانات الحساسة في الجلسات
تعتبر الجلسات رائعة لتخزين البيانات ، ولكن من الأفضل تجنب تخزين البيانات الحساسة فيها. يمكن للمهاجم خطف جلسة إذا قمت بتخزين بياناتها في ملف تعريف ارتباط وإرسالها عبر بروتوكول HTTP عادي. أمان تطبيقك مهم للمستخدمين.
الجلسات ذات حالة وهناك العديد من تطبيقات قواعد البيانات لمخازن ملفات تعريف الارتباط لحزمة Gorilla ، لقواعد بيانات SQL و NoSQL.