بررسی اجمالی
معمولاً برنامه های کاربردی وب با هم کار می کنند تا عملکردهای مختلف را در یک ورود به سیستم یکپارچه کنند. بنابراین، اگر برنامههای کاربردی وب (مثلاً: چندین ماژول) بتوانند در یک برنامه اصلی میزبانی کنند، استفاده از مکانیسمهای اشتراکگذاری کوکی هسته ASP.NET از طریق یک تجربه ورود به سیستم (SSO) آسانتر است.
مراحل
برای مثال، میتوانیم با دو برنامه MVC در هسته Net شروع کنیم و کوکی را برای احراز هویت به اشتراک بگذاریم. بیایید نام برنامه اولیه را "PrimarySite" و برنامه ثانویه "Subsite" در نظر بگیریم.
در ابتدا هر دو برنامه دارای فایل startup.cs مشابهی هستند.
services.AddControllersWithViews();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
} else {
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints => {
endpoints.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
مرحله 1
ابتدا میتوانیم یک صفحه ورود/ثبت در Primarysite ایجاد کنیم. برای آن باید میانافزار احراز هویت را در روش پیکربندی بالای میانافزار UseAuthorization اضافه کنیم.
مراحل 2
یک پیکربندی اشتراک گذاری کوکی را با یک مکان ذخیره کلید در روش Configureservices startup.cs تنظیم کنید. نام برنامه "SharedCookieApp" باید در سایر برنامه ها/ماژول ها رایج باشد. (فضای نام موجود: - با استفاده از Microsoft.AspNetCore.DataProtection؛)
سپس تنظیمات سیاست کوکی را اعمال کنید.
services.Configure < CookiePolicyOptions > (options => {
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
ما از برنامهها/راهحلهای مختلف استفاده میکنیم، خطمشی همان سایت را روی «هیچ» تنظیم میکنیم
GetKyRingDirectoryInfo یک روش سفارشی برای بازیابی فهرست مسیرهای مشترک است.
string applicationBasePath = System.AppContext.BaseDirectory;
DirectoryInfo directoryInof = new DirectoryInfo(applicationBasePath);
string keyRingPath = Configuration.GetSection("AppKeys").GetValue < string > ("keyRingPath");
do {
directoryInof = directoryInof.Parent;
DirectoryInfo keyRingDirectoryInfo = new DirectoryInfo($ "{directoryInof.FullName}{keyRingPath}");
if (keyRingDirectoryInfo.Exists) {
return keyRingDirectoryInfo;
}
}
while (directoryInof.Parent != null);
throw new Exception($ "key ring path not found");
}
مسیر مشترک را می توان در appsettings.json تنظیم کرد
مرحله 3
برای آزمایش عملکرد ثبت/ورود، میتوانیم از پایگاه داده درون حافظه (ذخیره دادهها در حافظه نه در پایگاه داده واقعی) استفاده کنیم. برای این کار باید بستههای NuGet زیر (شناسه هسته چارچوب موجودیت و حافظه داخلی) را نصب کنیم. این مرحله اختیاری است و برای تست ثبت نام و ورود استفاده می شود. فریم ورک موجودیت واقعی اگر در برنامه اصلی وجود داشته باشد، قابل استفاده است.
سپس یک کلاس زمینه ایجاد کنید که از IdentityDBContext به ارث می برد
public AppDbContext(DbContextOptions < AppDbContext > options): base(options) {}
}