المصادقة على asp. net core من خلال IdentityServer4

لن يكون هناك أي شيء غير عادي هنا ، سيصادق إطار عمل IdentityServer4 باستخدام اسم مستخدم وكلمة مرور على واجهة برمجة تطبيقات معينة ، بالإضافة إلى مقبض Refresh_token.

ستعمل مع IdentityDbContext الموجودة ، IdentityUser.

ستكون النتيجة سيناريو يتم فيه إصدار تحديث_ثابت واحد وتخزينه في جدول PersistedGrants لكل مصادقة. هذا أحد أنواع أذونات OAuth 2.0 الأربعة:

بيانات اعتماد كلمة مرور مالك المورد: تستخدمها التطبيقات الموثوقة ، مثل التطبيقات التي تعد جزءًا من الخدمة نفسها.

يتم تنفيذ جميع أعمال الصيانة الرمزية من خلال الإطار.

لذلك دعونا نبدأ.

لتحديد طريقة الحل ، يتم تعيين "العملاء" ، وسوف يكون لدي واحد:

DataLayer.Config

new Client { ClientId = _configurationManager.Value.ClientId, AllowedGrantTypes = GrantTypes.ResourceOwnerPassword, //   RequireClientSecret = false, //Client Secret    ,  AllowedScopes = { _configurationManager.Value.ApiName, IdentityServerConstants.StandardScopes.OpenId, IdentityServerConstants.StandardScopes.Profile},//      /connect/userinfo AllowOfflineAccess = true // - } 

بعد ذلك ، يجلس هذا العميل في قاعدة البيانات عند إنشائه:

TestIdentityServer.Program

 services.GetRequiredService<DbInitializer>().Initialize(); 

في طريقة "التهيئة" ، تمت إضافة التعليمات البرمجية لإنشاء قواعد البيانات الضرورية وإدراج البيانات ، بما في ذلك العميل. ولكن قبل ذلك ، من الضروري إجراء الترحيل ، لأنه سيكون عليك إنشاء قاعدة بيانات من 3 سياقات ، حيث يكون السياق الأول هو IdentityDbContext ApplicationUser ، والباقي لـ IdentityServer4:

DataLayer.DbInitializer

  _context.Database.Migrate(); _configurationDbContext.Database.Migrate(); _persistedGrantDbContext.Database.Migrate(); 

  if (!_configurationDbContext.Clients.Any()) { foreach (var client in _config.GetClients().ToList()) { _configurationDbContext.Clients.Add(client.ToEntity()); } _configurationDbContext.SaveChanges(); } 

الهجرات:

 dotnet ef migrations add InitialIdentityServerPersistedGrantDbMigration -c PersistedGrantDbContext -o Data/Migrations/IdentityServer/PersistedGrantDb dotnet ef migrations add InitialIdentityServerConfigurationDbMigration -c ConfigurationDbContext -o Data/Migrations/IdentityServer/ConfigurationDb dotnet ef migrations add InitialAuthMigration -c AuthContext -o Data/Migrations/IdentityServer/Auth 

سيكون الرابط للرمز في النهاية.

المضي قدما. بعد إعداد العميل وإنشاء قاعدة البيانات ، يمكن للخادم بالفعل معالجة الطلبات "/ connect / token" عن طريق تسجيل الدخول بكلمة مرور وإصدار access_token مع Refresh_token.
وفقا لها ، مع إشارة Refr_token ، قم بتحديثها.

كلمة مرور اسم المستخدم:

الصورة

Refr_token

الصورة

/ connect / userinfo

الصورة

الآن قم بإضافة واجهة برمجة تطبيقات (API) سيتم تفويضها بواسطة IdentityServer4. ستكون علاقته به على النحو التالي:

DataApi.Startup

  services.AddAuthentication("Bearer") .AddIdentityServerAuthentication(options => { options.Authority = settings.Authority; //  http://localhost:5000 options.RequireHttpsMetadata = false; options.ApiName = settings.ApiName;//api1 }); 

سيتم نشر واجهة برمجة التطبيقات نفسها في منفذ آخر.

سيتم التحقق من التفويض الآن كالمعتاد باستخدام السمة "[Authorize]".

/ api / افتراضي

الصورة



هذا كل شيء ، اكتب من يعتقد ما أو ما هو مفقود.

رابط للكود .

UPD: الرموز المميزة لـ jwt

طرق التوقيع المضافة: RSA التي يتم إنشاؤها عند بدء التشغيل وملف شهادة * .pfx. يمكن تحويل الطريقة المقابلة إلى "appsettings.json" ، خاصية "SigningCredentialConfig".

Source: https://habr.com/ru/post/ar426289/


All Articles