۶ سال و ۱۱ ماه قبل، چهارشنبه ۳ آبان ۱۳۹۶، ساعت ۱۸:۰۲
۶ سال و ۱۱ ماه قبل، سهشنبه ۲ آبان ۱۳۹۶، ساعت ۱۶:۲۷
یک نکتهی تکمیلی: فعالسازی IClaimsTransformation در حالت استفادهی از HttpSys
اگر مثال انتهای بحث را برای حالت HttpSys اجرا کنید (مراجعه به فایل Program.cs و فعالسازی UseHttpSys کامنت شده)، و سپس اجرای برنامه توسط dotnet run (و نه IIS) به صورت مستقل، مشاهده خواهید کرد که GivenName در لیست Claims ظاهر نمیشود. یعنی IClaimsTransformation اجرا نشدهاست (برخلاف حالت اجرای برنامه توسط IIS که تصویر آن در انتهای بحث ارسال شدهاست).
برای فعالسازی کامل HttpSys (عدم استفاده از IIS و حالتهای اجرای متکی به خود)، دو مرحلهی دیگر نیاز است:
الف) مشخص سازی HttpSysDefaults به عنوان DefaultAuthenticateScheme
ب) ذکر اجباری متد ()app.UseAuthentication در متد Configure فایل آغازین برنامه. این مورد برای کار با IIS اجباری نیست.
پس از این دو تنظیم است که IClaimsTransformation در حالت استفادهی از HttpSys به صورت خودکار اجرا خواهد شد.
اگر مثال انتهای بحث را برای حالت HttpSys اجرا کنید (مراجعه به فایل Program.cs و فعالسازی UseHttpSys کامنت شده)، و سپس اجرای برنامه توسط dotnet run (و نه IIS) به صورت مستقل، مشاهده خواهید کرد که GivenName در لیست Claims ظاهر نمیشود. یعنی IClaimsTransformation اجرا نشدهاست (برخلاف حالت اجرای برنامه توسط IIS که تصویر آن در انتهای بحث ارسال شدهاست).
برای فعالسازی کامل HttpSys (عدم استفاده از IIS و حالتهای اجرای متکی به خود)، دو مرحلهی دیگر نیاز است:
الف) مشخص سازی HttpSysDefaults به عنوان DefaultAuthenticateScheme
services.AddAuthentication(options => { // for both windows and anonymous authentication //options.DefaultChallengeScheme = IISDefaults.AuthenticationScheme; // Use it for IIS options.DefaultChallengeScheme = HttpSysDefaults.AuthenticationScheme; // Use it for HttpSys options.DefaultAuthenticateScheme = HttpSysDefaults.AuthenticationScheme; // Use it for HttpSys });
پس از این دو تنظیم است که IClaimsTransformation در حالت استفادهی از HttpSys به صورت خودکار اجرا خواهد شد.
۶ سال و ۱۱ ماه قبل، یکشنبه ۳۰ مهر ۱۳۹۶، ساعت ۲۳:۲۱
ادامهی بحث در اینجا: «فعالسازی Windows Authentication در برنامههای ASP.NET Core 2.0»
۶ سال و ۱۱ ماه قبل، یکشنبه ۳۰ مهر ۱۳۹۶، ساعت ۰۱:۵۵
IClaimsTransformation مربوط به NET Core 2.x. هست. در نگارش 1x نام دیگری داشتهاست (IClaimsTransformer بوده).
۶ سال و ۱۱ ماه قبل، یکشنبه ۳۰ مهر ۱۳۹۶، ساعت ۰۰:۵۶
این مقدار پیشفرض زمانی به یک value type انتساب داده میشود که نوع شما
nullable تعریف نشده باشد. اگر باشد دقیقا null هست و نه هیچ مقدار دیگری. اگر PersianDateModelBinder مقدار پیشفرضی را انتساب میدهد، آنرا تغییر دهید (و مرتبط نیست به مباحث زبان؛ تصمیم شخصی هست).
۶ سال و ۱۱ ماه قبل، شنبه ۲۹ مهر ۱۳۹۶، ساعت ۲۲:۴۵
همینقدر که قسمت ثبت آنرا در سیستم تزریق وابستگیهای برنامه انجام داده باشید، با فراخوانی httpContext.AuthenticateAsync، متد TransformAsync کلاس ApplicationClaimsTransformation به صورت خودکار فراخوانی و اجرا خواهد شد و در نتیجهی آن، امکان افزودن Claims سفارشی، به Claims موجود میسر میشود. چون از Windows Authentication استفاده میکنید، با استفادهی از IISMiddleware، کار فراخوانی httpContext.AuthenticateAsync به صورت خودکار انجام میشود و در نتیجهی آن، اجرای متد TransformAsync خودکار است.
۶ سال و ۱۱ ماه قبل، شنبه ۲۹ مهر ۱۳۹۶، ساعت ۲۲:۳۱
- همانطور که در مقدمهی بحث هم عنوان شد، مفهوم Child Actions از نگارش Core حذف شدهاست؛ چون مشکلات زیادی دارد (به این لیست، مشکلات async و همچنین آغاز یک چرخهی جدید MVC را هم اضافه کنید که کارآیی مناسبی ندارد و یک سربار به شمار میرود).
- جایگزین آن ViewComponet است و از لحاظ دسترسی به منابع و سرویسها محدودیتی ندارد. یک مثال
- هنوز هم اگر صرفا نیاز به رندر یک پارشال View را به صورت Ajax ایی دارید، روش زیر کار میکند:
جایی که میخواستید Html.RenderAction را قرار دهید، قطعه کد Ajax ایی زیر را فراخوانی کنید:
کار آن دریافت محتوای html ایی اکشن متد ذیل و افزودن آن به div مشخص شدهاست.
با این پارشال View فرضی:
- جایگزین آن ViewComponet است و از لحاظ دسترسی به منابع و سرویسها محدودیتی ندارد. یک مثال
- هنوز هم اگر صرفا نیاز به رندر یک پارشال View را به صورت Ajax ایی دارید، روش زیر کار میکند:
جایی که میخواستید Html.RenderAction را قرار دهید، قطعه کد Ajax ایی زیر را فراخوانی کنید:
<div id="dynamicContentContainer"></div> <script> $.get('@Url.Action("GetData", "Home")', {id : 1}, function(content){ $("#dynamicContentContainer").html(content); }); </script>
[HttpGet] public IActionResult GetData(int id) { return PartialView(id); }
@model int <span>Values from controler :</span> @Model
۶ سال و ۱۱ ماه قبل، شنبه ۲۹ مهر ۱۳۹۶، ساعت ۱۶:۴۵
برای افزودن لیست Claims کاربر موجود در بانک اطلاعاتی به لیست Claims کاربر وارد شدهی توسط اکتیو دایرکتوری، باید از یک IClaimsTransformation سفارشی استفاده کنید تا این نگاشت را انجام دهد (نمونهاش در مطلب « سفارشی سازی ASP.NET Core Identity - قسمت چهارم - User Claims » به نحو دیگری استفاده شدهاست):
پیاده سازی کامل آن در اینجا
و برای ثبت آن:
public class ApplicationClaimsTransformation : IClaimsTransformation { }
و برای ثبت آن:
services.AddScoped<IClaimsTransformation, ApplicationClaimsTransformation>();
۶ سال و ۱۱ ماه قبل، شنبه ۲۹ مهر ۱۳۹۶، ساعت ۱۴:۳۴
برای کار با اکتیو دایرکتوری کار زیادی لازم نیست انجام شود. مرحلهی اول آن فعالسازی Windows Authentication در برنامههای ASP.NET Core است. در این حالت همینقدر که کاربر، به ویندوز متصل به شبکه و اکتیو دایرکتوری وارد شده باشد، به سیستم لاگین خواهد شد. نیازی به تغییری هم در هیچ قسمتی از برنامه نیست. مرحلهی بعد آن کار با نقشهای سیستم است. این نقشها هم در User.Identity هم اکنون موجود هستند و این شیء توسط Windows Authentication و گروههای اکتیو دایرکتوری پیشتر به صورت خودکار مقدار دهی شدهاست:
- نحوهی یکپارچه سازی با سیستم اعتبارسنجی ویندوز (با این فعالسازی، ویژگیهای [Authorize] و [AllowAnonymous] بلافاصله قابل استفاده خواهند بود و User.Identity هم به صورت خودکار مقداردهی میشود.)
- یک نمونه مثال از دسترسی به نقشهای اکتیودایرکتوری (با این تنظیمات برای مثال دسترسی به نقشهای [Authorize(Roles = "Domain Admins")] و [Authorize(Roles = "Domain Users")] را خواهید داشت. یعنی برای مثال هرکاربری که عضو گروه Domain admins در اکتیو دایرکتوری باشد، امکان دسترسی به مورد اول را خواهد یافت.)
- نحوهی یکپارچه سازی با سیستم اعتبارسنجی ویندوز (با این فعالسازی، ویژگیهای [Authorize] و [AllowAnonymous] بلافاصله قابل استفاده خواهند بود و User.Identity هم به صورت خودکار مقداردهی میشود.)
- یک نمونه مثال از دسترسی به نقشهای اکتیودایرکتوری (با این تنظیمات برای مثال دسترسی به نقشهای [Authorize(Roles = "Domain Admins")] و [Authorize(Roles = "Domain Users")] را خواهید داشت. یعنی برای مثال هرکاربری که عضو گروه Domain admins در اکتیو دایرکتوری باشد، امکان دسترسی به مورد اول را خواهد یافت.)
۶ سال و ۱۱ ماه قبل، پنجشنبه ۲۷ مهر ۱۳۹۶، ساعت ۲۲:۵۳
در مطلب «ارتقاء به ASP.NET Core 1.0 - قسمت 18 - کار با ASP.NET Web API» در اولین نظر تکمیلی آن این مورد بحث شدهاست.