سهل الاستخدام وخفيف الوزن جدًا، تنفيذ مصادقة نظام Microsoft الأساسي لـ ASP.NET Core.
عرض على جيثب
.NET Framework 4.6.1 و/أو NetStandard 2.0 وما بعده
متعدد الأهداف: net8.0؛ net7.0; net6.0; net5.0; netcoreapp3.1; netcoreapp3.0; netstandard2.0; net461
تم نشر هذه المكتبة على NuGet. لذلك يمكن تثبيت حزمة NuGet مباشرة على مشروعك إذا كنت ترغب في استخدامها دون إجراء أي تغييرات مخصصة على الكود.
التحميل مباشرة من الرابط أدناه. يرجى النظر في تنزيل الحزمة الجديدة حيث أن الحزمة القديمة أصبحت قديمة.
رابط الحزمة الجديدة - AspNetCore.Authentication.Basic.
رابط الحزمة القديمة - Mihir.AspNetCore.Authentication.Basic.
أو عن طريق تشغيل الأمر أدناه في مشروعك.
PM> Install-Package AspNetCore.Authentication.Basic
العينات متاحة تحت دليل العينات.
إعداده بسيط للغاية. ستحتاج إلى معرفة عملية أساسية بـ ASP.NET Core 2.0 أو أحدث للبدء في استخدام هذه المكتبة.
هناك طريقتان مختلفتان لاستخدام هذه المكتبة للقيام بمهمتها. يمكن خلط كلا الطريقتين إذا لزم الأمر.
1] استخدام تطبيق IBasicUserValidationService
2] استخدام BasicOptions.Events (مندوب OnValidateCredentials) وهو نفس الأسلوب الذي ستجده في مكتبات مصادقة Microsoft
ملحوظات:
يتطلب الأمر تعيين Realm في الخيارات إذا لم يتم تعيين SuppressWWWAuthenticateHeader.
إذا تم استخدام تطبيق واجهة IBasicUserValidationService بالإضافة إلى تعيين مفوض BasicOptions.Events.OnValidateCredentials أيضًا، فسيتم استخدام هذا المفوض أولاً.
استخدم دائمًا بروتوكول HTTPS (شهادة SSL) في الإنتاج عند استخدام المصادقة الأساسية.
باستخدام AspNetCore.Authentication.Basic;public class Startup{public void ConfigureServices(IServiceCollection Services){// يتطلب تعيين المجال في الخيارات إذا لم يتم تعيين SuppressWWWAuthenticateHeader.// إذا تم استخدام تطبيق واجهة IBasicUserValidationService بالإضافة إلى الخيارات تم أيضًا تعيين مندوب .Events.OnValidateCredentials ثم هذا سيتم استخدام المفوض أولاً.services.AddAuthentication(BasicDefaults.AuthenticationScheme)// سيتطلب AddBasic أدناه بدون معلمة النوع تعيين options.Events.OnValidateCredentials delegete.//.AddBasic(options => { options.Realm = "My App "; });// ستضيف AddBasic أدناه مع معلمة النوع BasicUserValidationService إلى حاوية التبعية. .AddBasic<BasicUserValidationService>(options => { options.Realm = "My App"; });services.AddControllers();//// افتراضيًا، لا يتم اختبار المصادقة لكل طلب وهو الطلب الافتراضي لـ ASP.NET Core السلوك.//// لذلك لتحدي المصادقة لكل الطلبات، يرجى استخدام خيار FallbackPolicy أدناه.//services.AddAuthorization(options =>//{// options.FallbackPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();//);}public void Configure(IApplicationBuilder app, IHostingEnvironment env){app.UseHttpsRedirection();// The أدناه ترتيب سلسلة خطوط الأنابيب هو مهم!app.UseRouting();app.UseAuthentication();app.UseAuthorization();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});}}
باستخدام AspNetCore.Authentication.Basic;public class Startup{public void ConfigureServices(IServiceCollection Services){// يتطلب تعيين المجال في الخيارات إذا لم يتم تعيين SuppressWWWAuthenticateHeader.// إذا تم استخدام تطبيق واجهة IBasicUserValidationService بالإضافة إلى الخيارات تم أيضًا تعيين مندوب .Events.OnValidateCredentials ثم هذا سيتم استخدام المفوض أولاً.services.AddAuthentication(BasicDefaults.AuthenticationScheme)// سيتطلب AddBasic أدناه بدون معلمة النوع تعيين options.Events.OnValidateCredentials delegete.//.AddBasic(options => { options.Realm = "My App "; });// ستضيف AddBasic أدناه مع معلمة النوع BasicUserValidationService إلى حاوية التبعية. .AddBasic<BasicUserValidationService>(options => { options.Realm = "My App"; });services.AddMvc();//// افتراضيًا، لا يتم تحدي المصادقة لكل طلب وهو الطلب الافتراضي لـ ASP.NET Core السلوك.//// لذا، لتحدي المصادقة لكل الطلبات، يرجى استخدام الخيار أدناه بدلاً من أعلاه Services.AddMvc().//services.AddMvc(options => //{// options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build()));//);} تكوين الفراغ العام (تطبيق IApplicationBuilder، IHostingEnvironment env){app.UseAuthentication();app.UseMvc();}}
باستخدام AspNetCore.Authentication.Basic;الفئة العامة BasicUserValidationService: IBasicUserValidationService{خاص للقراءة فقط ILogger<BasicUserValidationService> _logger;خاص للقراءة فقط IUserRepository _userRepository;public BasicUserValidationService(ILogger<BasicUserValidationService> logger, IUserRepository userRepository){_logger = logger;_userRepository = userRepository;}مهمة غير متزامنة عامة<bool> IsValidAsync(اسم مستخدم السلسلة، كلمة مرور السلسلة){try{// ملاحظة: لا تستخدم هذا التنفيذ. هذا لغرض العرض التوضيحي فقط// اكتب التنفيذ الخاص بك هنا وقم بإرجاع صحيح أو خطأ اعتمادًا على التحقق من الصحة..var user = انتظار _userRepository.GetUserByUsername(username);var isValid = user != null && user.Password == كلمة المرور;return isValid;}catch (Exception e){_logger.LogError(e, e.Message);throw;}}}
مطلوب أن يتم تعيينه إذا لم يتم تعيين SuppressWWWAuthenticateHeader على true. يتم استخدامه مع رأس استجابة WWW-Authenticate عند تحدي الطلبات غير المصادق عليها.
القيمة الافتراضية خاطئة.
إذا تم التعيين على "صحيح"، فلن يُرجع رأس استجابة WWW-Authenticate عند تحدي الطلبات غير المصادق عليها.
إذا تم التعيين على خطأ، فسوف يُرجع رأس استجابة WWW-Authenticate عند تحدي الطلبات غير المصادق عليها.
القيمة الافتراضية خاطئة.
إذا تم تعيينه على "صحيح"، فإنه يتحقق مما إذا كان مرشح السماح مجهولًا في إجراء وحدة التحكم أو بيانات التعريف على نقطة النهاية، والذي، إذا تم العثور عليه، فإنه لا يحاول مصادقة الطلب.
الكائن الذي يوفره التطبيق لمعالجة الأحداث التي تثيرها البرامج الوسيطة للمصادقة الأساسية.
قد يقوم التطبيق بتنفيذ الواجهة بالكامل، أو قد يقوم بإنشاء مثيل لـ BasicEvents ويقوم بتعيين مفوضين فقط للأحداث التي يريد معالجتها.
سيتم استدعاء المفوض المعين لهذه الخاصية قبل التحقق من صحة بيانات الاعتماد.
يجب عليك توفير مفوض لهذه الخاصية حتى تتم المصادقة.
في المفوض الخاص بك، يجب عليك إما استدعاء context.ValidationSucceeded() الذي سيتولى إنشاء مبدأ مطالبات المصادقة من تفاصيل المستخدم التي سيتم تخصيصها للسياق. الخاصية الرئيسية واستدعاء context.Success()، أو إنشاء مبدأ مطالبات المصادقة من المستخدم التفاصيل وتعيينها إلى الخاصية context.Principal وأخيرًا استدعاء الأسلوب context.Success().
إذا تم تعيين الخاصية context.Principal فقط دون استدعاء أسلوب context.Success()، فسيتم استدعاء أسلوب Success() تلقائيًا.
سيتم استدعاء المفوض المعين لهذه الخاصية عند نجاح المصادقة. لن يتم استدعاؤه إذا تم تعيين مندوب OnValidateCredentials.
يمكن استخدامه لإضافة المطالبات والرؤوس وما إلى ذلك إلى الاستجابة.
سيتم استدعاء المفوض المعين لهذه الخاصية عند طرح أي استثناء غير متوقع داخل المكتبة.
سيتم استدعاء المفوض المعين لهذه الخاصية قبل إعادة إرسال التحدي إلى المتصل عند التعامل مع استجابة غير مصرح بها.
استخدم هذا فقط إذا كنت تعرف ما تفعله وإذا كنت تريد استخدام التنفيذ المخصص. قم بتعيين المفوض للتعامل مع مخاوف التحدي 401، إذا كان نظام المصادقة المعني يتعامل مع تفاعل المصادقة كجزء من تدفق الطلب الخاص به. (مثل إضافة رأس استجابة، أو تغيير النتيجة 401 إلى 302 لصفحة تسجيل الدخول أو موقع تسجيل الدخول الخارجي.)
قم باستدعاء context.Handled() في النهاية حتى يتم تخطي أي منطق افتراضي لهذا التحدي.
سيتم استدعاء المفوض المعين لهذه الخاصية إذا فشل التفويض وأدى إلى استجابة محظورة.
استخدم هذا فقط إذا كنت تعرف ما تفعله وإذا كنت تريد استخدام التنفيذ المخصص.
قم بتعيين المفوض للتعامل مع Forbid.
قم باستدعاء context.Handled() في النهاية حتى يتم تخطي أي منطق افتراضي.
باستخدام ASP.NET Core، لا يتم اختبار جميع الطلبات للمصادقة بشكل افتراضي. لذلك لا تقلق إذا لم يتم الضغط على BasicUserValidationService عندما لا تقوم بتمرير تفاصيل المصادقة الأساسية المطلوبة مع الطلب. إنه سلوك طبيعي. يتحدى ASP.NET Core المصادقة فقط عندما يُطلب منه ذلك على وجه التحديد إما عن طريق تزيين وحدة التحكم/الطريقة باستخدام سمة عامل التصفية [Authorize] أو عن طريق وسائل أخرى.
ومع ذلك، إذا كنت تريد أن تتحدى جميع الطلبات المصادقة بشكل افتراضي، اعتمادًا على ما تستخدمه، يمكنك إضافة سطر الخيارات أدناه إلى طريقة ConfigureServices في فئة بدء التشغيل .
// في ASP.NET Core 3.0 onwardsservices.AddAuthorization(options =>{options.FallbackPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();});// OR// في ASP.NET Core 2.0 onwardsservices.AddMvc (خيارات => {options.Filters.Add(new AuthorizeFilter(new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build()));});
إذا كنت لا تستخدم MVC ولكنك تستخدم نقاط النهاية على ASP.NET Core 3.0 أو أحدث، فيمكنك إضافة طريقة سلسلة .RequireAuthorization()
إلى خريطة نقطة النهاية ضمن طريقة التكوين في فئة بدء التشغيل كما هو موضح أدناه.
// ASP.NET Core 3.0 onwardsapp.UseEndpoints(endpoints =>{endpoints.MapGet("/"، async context =>{await context.Response.WriteAsync("Hello World!");}).RequireAuthorization(); / / لاحظ هذا هنا!!!! });
يدعم ASP.NET Core إضافة أنظمة مصادقة متعددة تدعمها هذه المكتبة أيضًا. كل ما عليك فعله هو استخدام طريقة الامتداد التي تأخذ اسم المخطط كمعلمة. والباقي هو نفسه. ويمكن تحقيق ذلك بعدة طرق مختلفة. وفيما يلي مجرد مثال تقريبي سريع.
يرجى ملاحظة أن معلمة اسم المخطط يمكن أن تكون أي سلسلة تريدها.
الفراغ العام ConfigureServices(IServiceCollection Services){services.AddTransient<IUserRepository, InMemoryUserRepository>();services.AddAuthentication("Scheme1").AddBasic<BasicUserValidationService>("Scheme1", options => { options.Realm = "My App"; }).AddBasic<BasicUserValidationService_2>("Scheme2"، options => { options.Realm = "My App"; }).AddBasic("Scheme3"، options => { options.Realm = "تطبيقي"; options.Events = new BasicEvents{OnValidateCredentials = async (context) =>{var userRepository = context.HttpContext.RequestServices.GetRequiredService<IUserRepository>();var user = انتظار userRepository.GetUserByUsername(context.Username);var isValid = user! = فارغة && user.Password == context.Password;if (isValid){context.Response.Headers.Add("ValidationCustomHeader", "From OnValidateCredentials");varclaims = new[]{new Claim("CustomClaimType", "قيمة المطالبة المخصصة - من OnValidateCredentials") };context.ValidationSucceeded(claims); // المطالبات اختيارية}else{context.ValidationFailed();}}}});services.AddControllers();services.AddAuthorization(options =>{options.FallbackPolicy = new AuthorizationPolicyBuilder("Scheme1", "Scheme2", " Scheme3").RequireAuthenticatedUser().Build();});}
إصدار | ملحوظات |
---|---|
8.0.0 |
|
7.0.0 |
|
6.0.1 |
|
5.1.0 |
|
5.0.0 |
|
3.1.1 |
|
3.1.0 |
|
2.2.0 |
|
RFC 7617: المواصفات الفنية لـ HTTP Basic
وثائق الأمان الأساسية لـ ASP.NET
أسبنت/الأمن
رخصة معهد ماساتشوستس للتكنولوجيا