تكرار السؤال: …
الإجابة المختصرة
نظام تشفير مدمج لتأمين الكوكيز ورموز إعادة تعيين كلمات المرور؛ وفي الخوادم الموزعة يجب تخزين المفاتيح في مخزن مركزي (كـ Redis أو Azure Blob) وتشفيرها بـ Key Vault.
الشرح
تستخدم الـ Data Protection API لتشفير كل ما هو مؤقت وحساس في التطبيق. افتراضياً، تحفظ المفاتيح في مجلد محلي على القرص. إذا نشرت تطبيقك على عدة خوادم خلف Load Balancer، فإن خادماً لن يستطيع فك تشفير الكوكي الصادرة من خادم آخر. الحل الحتمي هو ضبط PersistKeysToStackExchangeRedis أو قاعدة بيانات مشتركة، وتشفير حلقة المفاتيح عبر ProtectKeysWithCertificate أو Azure Key Vault.
مثال بالكود
builder.Services.AddDataProtection()
.PersistKeysToStackExchangeRedis(redisConnection, "DataProtection-Keys")
.SetApplicationName("SharedApp");أخطاء شائعة
- ترك المفاتيح في المجلد المحلي الافتراضي في بيئات الحاويات السحابية مما يؤدي لخروج المستخدمين مع كل إعادة تشغيل للحاوية.