ASP.NET Core / دليل حلول تحريري

تشخيص الحالتين 401 و 403 ونتائج المصادقة غير المتوقعة

تتبّع مخطط المصادقة المختار والهوية الموثوقة والسياسة وقاعدة المورد ونتيجة HTTP، بدل اعتبار كل رفض إخفاقًا في تسجيل الدخول.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى

قاعدة معرفة للقراءة فقط · بلا تعليقات عامة

تعرّف على الأعراض

قد تعيد API محمية 401 أو 403 أو استجابة صفحة دخول غير متوقعة، وقد يتمكن مستدعٍ مصادق من الوصول إلى مورد مستخدم آخر. هذه أنماط إخفاق مختلفة. تغير سلوك ملفات تعريف الارتباط لنقاط النهاية المعروفة بأنها API في ASP.NET Core 10، فلا يجوز تعميم النصائح القديمة بشأن إعادة التوجيه التلقائية. لا يمنح رمز أو ملف تعريف ارتباط صالح وحده سلطة الوصول إلى المورد.

افهم الأسباب المحتملة

  • قد يكون السبب مخطط مصادقة خاطئًا أو افتراضيًا غير مناسب، أو وسيطًا مفقودًا، أو مطالبات غير موثوقة، أو تعيينًا لأنواع المطالبات، أو بيانات تفويض وصفية مغفلة، أو قاعدة ناقصة للمستأجر أو المالك. ليست CORS تفويضًا، ولا يعني إنشاء كائن ClaimsPrincipal داخل اختبار أنه جرى التحقق من أي بيانات اعتماد. ميّز طلب المصادقة challenge من رفض التفويض forbid ومن سياسة كشف معلومات المورد قبل توسيع الوصول أو تغيير رموز الحالات.

1. حدّد الطلب الفعلي ومخطط المصادقة المختار

سجّل نقطة النهاية وإصدار الإطار ومخطط المصادقة ونوع بيانات الاعتماد وسياق النتيجة الآمن. لا تنسخ رموز bearer أو ملفات تعريف ارتباط أو مفاتيح حقيقية أو حمولات هوية كاملة إلى السجلات أو الأمثلة. حدّد هل الطلب مجهول الهوية، أم فشلت مصادقته، أم نجحت لكنه يفتقر إلى التفويض. لا يقدم نجاح استدعاء المطور لأسلوب مباشرة أيًا من هذه الأدلة.

2. تحقّق من حد الثقة للمصادقة

راجع تسجيل معالج المصادقة المدعوم، واختيار المخطط الافتراضي أو الصريح، ومتطلبات جهة الإصدار والجمهور وفترة الصلاحية والتوقيع، وإعدادات الوكيل وTLS ذات الصلة. لا يعادل فك JSON لرمز التحقق من صحته. وفي ملفات تعريف الارتباط، افحص السلوك الحالي لبيانات نقطة النهاية وكونها API، والافتراضات المتعلقة بمفاتيح الحماية. لا تحول كل رفض إلى 200 ولا تعطل فحوص الثقة لإنجاح مثال تكامل.

3. اعزل السياسة باستخدام هويات اصطناعية صريحة

يقيّم البرنامج المكتمل سياسة تفويض فعلية على ثلاث حالات اصطناعية: هوية مجهولة، وهوية مصادقة بلا المطالبة اللازمة، وهوية تستوفيها. يثبت ذلك متطلبات السياسة، لا صلاحية رمز أو تحويل النتيجة إلى HTTP 401 أو 403. يساعد الاختبار المحدود على فصل منطق السياسة من سلوك المخطط ومسار الطلب، دون الاتصال بمزود هوية أو بدء خادم.

csharp فصل ثلاث نتائج لسياسة على هويات اصطناعية
using System;
using System.Security.Claims;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.DependencyInjection;

var services = new ServiceCollection();
services.AddLogging();
services.AddAuthorization(options => options.AddPolicy("Read", policy => policy.RequireAuthenticatedUser().RequireClaim("scope", "reports.read")));
using var provider = services.BuildServiceProvider();
var authorization = provider.GetRequiredService<IAuthorizationService>();
var anonymous = new ClaimsPrincipal(new ClaimsIdentity());
var missing = new ClaimsPrincipal(new ClaimsIdentity(authenticationType: "synthetic"));
var reader = new ClaimsPrincipal(new ClaimsIdentity(new[] { new Claim("scope", "reports.read") }, "synthetic"));
bool a = (await authorization.AuthorizeAsync(anonymous, null, "Read")).Succeeded;
bool m = (await authorization.AuthorizeAsync(missing, null, "Read")).Succeeded;
bool r = (await authorization.AuthorizeAsync(reader, null, "Read")).Succeeded;
Console.WriteLine($"anonymous={a} missingClaim={m} reader={r}");
الناتج المتوقع
anonymous=False missingClaim=False reader=True

هوية القارئ الاصطناعية المصادقة هي وحدها التي تستوفي هذه السياسة؛ ولا يجري أي تحقق من بيانات اعتماد أو تدفق مصادقة عبر HTTP.

4. افحص إرفاق السياسة وملكية المورد

تأكد أن نقطة النهاية تتطلب السياسة فعلًا، وأن بيانات السياسة البديلة fallback والسماح بالمجهول مقصودة. ثم افحص المستأجر والمالك والعملية وحالة المورد الحالية اعتمادًا على بيانات موثوقة. لا تخول مطالبة قراءة عامة الوصول إلى كل تقرير. وإذا أمكن تغير الحالة قبل تعديل المورد، فراجع المعاملة والتزامن أيضًا. لا تثق بترويسة مستأجر أو معرّف مسار بوصفهما دليلًا على الصلاحية.

5. تحقّق من سلوك HTTP المضبوط والأخطاء الآمنة

تعتمد نتائج challenge وforbid وإعادة التوجيه وكشف وجود المورد أو إخفائه باستجابة غير موجود وإخراج الأخطاء المنظمة على عقد المخطط ونقطة النهاية المقصود. اختبرها عبر مسار طلبات معزول ومدعوم بدل استنتاجها من AuthorizationResult.Succeeded. أدرج الحالات المشوهة والمنتهية الصلاحية وذات الجمهور الخاطئ والمطالبة المفقودة والعابرة للمستأجر والمسموحة. احفظ السبب الداخلي في تشخيص مضبوط، واجعل التفاصيل العامة خالية من الأسرار.

تحقق من نجاح الإصلاح

يجب أن يطبع البرنامج المحلي anonymous=False missingClaim=False reader=True. ولإثبات إصلاح فعلي، تحقّق من المصادقة واختيار السياسة والملكية وترتيب الوسائط ونتائج HTTP داخل إعداد التطبيق المعزول المقصود. لا يثبت نجاح سياسة اصطناعية الثقة بالرمز أو سلامة CORS وCSRF أو حماية نقطة النهاية أو استمرار صلاحية مفاتيح النشر. سجّل الطبقة التي اختُبرت بدقة واحتفظ بالحالات السلبية.

امنع تكرار المشكلة

  • احتفظ بخرائط مخطط المصادقة والسياسة والمورد، وعقود المطالبات الموثوقة، واستثناءات السماح بالمجهول الصريحة، واختبارات عزل المستأجرين. راجع تغييرات المصادقة بين إصدارات الإطار وإعدادات مفاتيح النشر والوكيل. افصل سلوك أصل المتصفح عن سلطة الخادم، ولا تحول الهويات التي يصنعها الاختبار يدويًا إلى طريقة إنشاء هويات الإنتاج.

المراجع الرسمية