لن يكون هناك أي شيء غير عادي هنا ، سيصادق إطار عمل IdentityServer4 باستخدام اسم مستخدم وكلمة مرور على واجهة برمجة تطبيقات معينة ، بالإضافة إلى مقبض Refresh_token.
ستعمل مع IdentityDbContext الموجودة ، IdentityUser.
ستكون النتيجة سيناريو يتم فيه إصدار تحديث_ثابت واحد وتخزينه في جدول PersistedGrants لكل مصادقة. هذا أحد أنواع أذونات OAuth 2.0 الأربعة:
بيانات اعتماد كلمة مرور مالك المورد: تستخدمها التطبيقات الموثوقة ، مثل التطبيقات التي تعد جزءًا من الخدمة نفسها.يتم تنفيذ جميع أعمال الصيانة الرمزية من خلال الإطار.
لذلك دعونا نبدأ.
لتحديد طريقة الحل ، يتم تعيين "العملاء" ، وسوف يكون لدي واحد:
DataLayer.Confignew Client { ClientId = _configurationManager.Value.ClientId, AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
بعد ذلك ، يجلس هذا العميل في قاعدة البيانات عند إنشائه:
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;
سيتم نشر واجهة برمجة التطبيقات نفسها في منفذ آخر.
سيتم التحقق من التفويض الآن كالمعتاد باستخدام السمة "[Authorize]".
/ api / افتراضي

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