آموزش هوش تجاری از ۰ تا ۱۰۰

  • ۰
  • ۰

جنبه های زیادی در مورد امنیت در میکروسرویس ها و برنامه های کاربردی وب وجود دارد که این موضوع می تواند به راحتی چندین کتاب مانند این را به خود اختصاص دهد. بنابراین، در این بخش، ما بر روی احراز هویت، مجوز، و اسرار برنامه تمرکز خواهیم کرد.

 

احراز هویت را در میکروسرویس ها و برنامه های وب دات نت اجرا کنید
اغلب لازم است که منابع و APIهای منتشر شده توسط یک سرویس به کاربران یا مشتریان معتمد خاصی محدود شوند. اولین قدم برای اتخاذ این نوع تصمیمات اعتماد در سطح API، احراز هویت است. احراز هویت فرآیند تأیید مطمئن هویت کاربر است.

در سناریوهای میکروسرویس، احراز هویت معمولاً به صورت مرکزی انجام می شود. اگر از یک API Gateway استفاده می کنید، دروازه مکان خوبی برای احراز هویت است. اگر از این روش استفاده می‌کنید، مطمئن شوید که نمی‌توان مستقیماً به میکروسرویس‌ها (بدون دروازه API) دسترسی پیدا کرد، مگر اینکه امنیت بیشتری برای تأیید اعتبار پیام‌ها وجود داشته باشد، چه پیام‌ها از دروازه می‌آیند یا نه.

زمانی که API Gateway احراز هویت را متمرکز می کند، هنگام ارسال درخواست ها به میکروسرویس ها، اطلاعات کاربر را اضافه می کند. اگر می‌توان مستقیماً به سرویس‌ها دسترسی داشت، یک سرویس احراز هویت مانند Azure Active Directory یا یک میکروسرویس احراز هویت اختصاصی که به عنوان یک سرویس رمز امنیتی (STS) عمل می‌کند می‌تواند برای احراز هویت کاربران استفاده شود. تصمیمات اعتماد بین سرویس ها با توکن های امنیتی یا کوکی ها به اشتراک گذاشته می شود. (این توکن ها را می توان در صورت نیاز با اجرای اشتراک کوکی بین برنامه های ASP.NET Core به اشتراک گذاشت.) 

 

هنگامی که میکروسرویس ها مستقیماً در دسترس قرار می گیرند، اعتماد، که شامل احراز هویت و مجوز می شود، توسط یک رمز امنیتی صادر شده توسط یک میکروسرویس اختصاصی، که بین میکروسرویس ها به اشتراک گذاشته شده است، مدیریت می شود.

 

با ASP.NET Core Identity احراز هویت
مکانیزم اصلی در ASP.NET Core برای شناسایی کاربران یک برنامه، سیستم عضویت ASP.NET Core Identity است. ASP.NET Core Identity اطلاعات کاربر (از جمله اطلاعات ورود به سیستم، نقش ها و ادعاها) را در یک فروشگاه داده که توسط توسعه دهنده پیکربندی شده است ذخیره می کند. به طور معمول، فروشگاه داده های ASP.NET Core Identity یک فروشگاه Entity Framework است که در بسته Microsoft.AspNetCore.Identity.EntityFrameworkCore ارائه شده است. با این حال، فروشگاه‌های سفارشی یا سایر بسته‌های شخص ثالث می‌توانند برای ذخیره اطلاعات هویتی در Azure Table Storage، CosmosDB یا مکان‌های دیگر استفاده شوند.

 

  نکته

ASP.NET Core 2.1 و نسخه های بعدی ASP.NET Core Identity را به عنوان کتابخانه کلاس Razor ارائه می کند، بنابراین مانند نسخه های قبلی، کدهای لازم را در پروژه خود مشاهده نخواهید کرد. برای جزئیات بیشتر در مورد نحوه سفارشی کردن کد Identity مطابق با نیازهای شما، Scaffold Identity را در پروژه های ASP.NET Core ببینید.

کد زیر از الگوی پروژه ASP.NET Core Web Application MVC 3.1 با احراز هویت حساب کاربری فردی انتخاب شده است. این نشان می دهد که چگونه می توان ASP.NET Core Identity را با استفاده از Entity Framework Core در روش Startup.ConfigureServices پیکربندی کرد.

 

public void ConfigureServices(IServiceCollection services)
{
    //...
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));

    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.AddRazorPages();
    //...
}

 

هنگامی که ASP.NET Core Identity پیکربندی شد، با افزودن app.UseAuthentication() و endpoints.MapRazorPages() همانطور که در کد زیر در روش Startup.Configure سرویس نشان داده شده است، آن را فعال می کنید:

 

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...
    app.UseRouting();

    app.UseAuthentication();
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages();
    });
    //...
}

 

مهم

خطوط در کد قبلی باید به ترتیبی که نشان داده شده باشد تا هویت به درستی کار کند.

 

استفاده از ASP.NET Core Identity چندین سناریو را فعال می کند:

  • اطلاعات کاربری جدید را با استفاده از نوع UserManager (userManager.CreateAsync) ایجاد کنید.
  • احراز هویت کاربران با استفاده از نوع SignInManager. می‌توانید از signInManager.SignInAsync برای ورود مستقیم به سیستم یا signInManager.PasswordSignInAsync برای تأیید صحیح بودن رمز عبور کاربر استفاده کنید و سپس وارد سیستم شوید.
  • یک کاربر را بر اساس اطلاعات ذخیره شده در یک کوکی (که توسط میان افزار ASP.NET Core Identity خوانده می شود) شناسایی کنید تا درخواست های بعدی از یک مرورگر شامل هویت و ادعاهای کاربر وارد شده به سیستم شود.

ASP.NET Core Identity از احراز هویت دو مرحله ای نیز پشتیبانی می کند.

برای سناریوهای احراز هویت که از یک ذخیره اطلاعات کاربر محلی استفاده می کنند و هویت بین درخواست ها با استفاده از کوکی ها حفظ می شود (همانطور که برای برنامه های وب MVC معمول است)، ASP.NET Core Identity یک راه حل توصیه شده است.

 

با ارائه دهندگان خارجی احراز هویت
ASP.NET Core از ارائه دهندگان احراز هویت خارجی نیز پشتیبانی می کند تا کاربران بتوانند از طریق جریان های OAuth 2.0 وارد شوند. این بدان معناست که کاربران می توانند با استفاده از فرآیندهای احراز هویت موجود از ارائه دهندگانی مانند مایکروسافت، گوگل، فیس بوک یا توییتر وارد سیستم شوند و این هویت ها را با هویت هسته ASP.NET در برنامه خود مرتبط کنند.

برای استفاده از احراز هویت خارجی، علاوه بر گنجاندن میان افزار احراز هویت همانطور که قبلاً ذکر شد، با استفاده از متد ()app.UseAuthentication، باید ارائه دهنده خارجی را نیز همانطور که در مثال زیر نشان داده شده است در Startup ثبت کنید:

 

public void ConfigureServices(IServiceCollection services)
{
    //...
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.AddAuthentication()
        .AddMicrosoftAccount(microsoftOptions =>
        {
            microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
            microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
        })
        .AddGoogle(googleOptions => { ... })
        .AddTwitter(twitterOptions => { ... })
        .AddFacebook(facebookOptions => { ... });
    //...
}

 

ارائه دهندگان محبوب احراز هویت خارجی و بسته های NuGet مرتبط با آنها درزیر نشان داده شده است:


Microsoft Microsoft.AspNetCore.Authentication.MicrosoftAccount
Google Microsoft.AspNetCore.Authentication.Google
فیس بوک Microsoft.AspNetCore.Authentication.Facebook
توییتر Microsoft.AspNetCore.Authentication.Twitterپ


در همه موارد، شما باید یک روند ثبت درخواست را تکمیل کنید که وابسته به فروشنده است و معمولاً شامل موارد زیر است:

  1. دریافت شناسه درخواست مشتری
  2. دریافت راز درخواست مشتری
  3. پیکربندی URL تغییر مسیر، که توسط میان افزار مجوز و ارائه دهنده ثبت شده انجام می شود
  4. به صورت اختیاری، پیکربندی URL خروج از سیستم برای مدیریت صحیح خروج از سیستم در یک سناریوی Single Sign On (SSO).

 

  نکته

تمام جزئیات توسط میان افزار مجوز و سرویس هایی که قبلا ذکر شد مدیریت می شود. بنابراین، هنگام ایجاد پروژه برنامه وب ASP.NET Core در ویژوال استودیو، علاوه بر ثبت ارائه دهندگان احراز هویت که قبلا ذکر شد، فقط باید گزینه تأیید هویت حساب کاربری فردی را انتخاب کنید.

 

احراز هویت با توکن های حامل
احراز هویت با ASP.NET Core Identity (یا Identity plus ارائه دهندگان احراز هویت خارجی) برای بسیاری از سناریوهای برنامه وب که در آنها ذخیره اطلاعات کاربر در یک کوکی مناسب است، به خوبی کار می کند. با این حال، در سناریوهای دیگر، کوکی‌ها ابزاری طبیعی برای تداوم و انتقال داده‌ها نیستند.

برای مثال، در ASP.NET Core Web API که نقاط پایانی RESTful را نشان می‌دهد که ممکن است توسط برنامه‌های یک صفحه (SPA)، توسط کلاینت‌های بومی یا حتی سایر APIهای وب قابل دسترسی باشند، معمولاً می‌خواهید به جای آن از تأیید اعتبار توکن حامل استفاده کنید. این نوع برنامه‌ها با کوکی‌ها کار نمی‌کنند، اما می‌توانند به راحتی توکن حامل را بازیابی کنند و آن را در هدر مجوز درخواست‌های بعدی قرار دهند. برای فعال کردن احراز هویت توکن، ASP.NET Core از چندین گزینه برای استفاده از OAuth 2.0 و OpenID Connect پشتیبانی می کند.

 

با یک OpenID Connect یا OAuth 2.0 Identity ارائه دهنده احراز هویت
اگر اطلاعات کاربر در Azure Active Directory یا راه حل هویت دیگری که از OpenID Connect یا OAuth 2.0 پشتیبانی می کند ذخیره شده است، می توانید از بسته Microsoft.AspNetCore.Authentication.OpenIdConnect برای احراز هویت با استفاده از گردش کار OpenID Connect استفاده کنید. برای مثال، برای احراز هویت به میکروسرویس Identity.Api در eShopOnContainers، یک برنامه وب ASP.NET Core می‌تواند از میان‌افزار آن بسته استفاده کند، همانطور که در مثال ساده‌شده زیر در Startup.cs نشان داده شده است:

 

// Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    //…
    app.UseAuthentication();
    //…
    app.UseEndpoints(endpoints =>
    {
        //...
    });
}

public void ConfigureServices(IServiceCollection services)
{
    var identityUrl = Configuration.GetValue<string>("IdentityUrl");
    var callBackUrl = Configuration.GetValue<string>("CallBackUrl");
    var sessionCookieLifetime = Configuration.GetValue("SessionCookieLifetimeMinutes", 60);

    // Add Authentication services

    services.AddAuthentication(options =>
    {
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    })
    .AddCookie(setup => setup.ExpireTimeSpan = TimeSpan.FromMinutes(sessionCookieLifetime))
    .AddOpenIdConnect(options =>
    {
        options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.Authority = identityUrl.ToString();
        options.SignedOutRedirectUri = callBackUrl.ToString();
        options.ClientId = useLoadTest ? "mvctest" : "mvc";
        options.ClientSecret = "secret";
        options.ResponseType = useLoadTest ? "code id_token token" : "code id_token";
        options.SaveTokens = true;
        options.GetClaimsFromUserInfoEndpoint = true;
        options.RequireHttpsMetadata = false;
        options.Scope.Add("openid");
        options.Scope.Add("profile");
        options.Scope.Add("orders");
        options.Scope.Add("basket");
        options.Scope.Add("marketing");
        options.Scope.Add("locations");
        options.Scope.Add("webshoppingagg");
        options.Scope.Add("orders.signalrhub");
    });
}

 

هنگامی که از این گردش کار استفاده می کنید، به میان افزار ASP.NET Core Identity نیازی نیست، زیرا تمام ذخیره سازی اطلاعات کاربر و احراز هویت توسط سرویس Identity مدیریت می شود.

 

توکن های امنیتی را از یک سرویس ASP.NET Core صادر کنید
اگر ترجیح می‌دهید به جای استفاده از یک ارائه‌دهنده هویت خارجی، توکن‌های امنیتی برای کاربران محلی ASP.NET Core Identity صادر کنید، می‌توانید از چند کتابخانه خوب شخص ثالث بهره ببرید.

IdentityServer4 و OpenIddict ارائه دهندگان OpenID Connect هستند که به راحتی با ASP.NET Core Identity ادغام می شوند تا به شما امکان می دهند توکن های امنیتی را از یک سرویس ASP.NET Core صادر کنید. اسناد IdentityServer4 دستورالعمل های عمیقی برای استفاده از کتابخانه دارد. با این حال، مراحل اساسی استفاده از IdentityServer4 برای صدور توکن به شرح زیر است.

  1. شما app.UseIdentityServer را در روش Startup.Configure فراخوانی می کنید تا IdentityServer4 را به خط لوله پردازش درخواست HTTP برنامه اضافه کنید. این به کتابخانه اجازه می‌دهد تا درخواست‌ها را برای نقاط پایانی OpenID Connect و OAuth2 مانند /connect/token ارائه کند.
  2. شما IdentityServer4 را در Startup.ConfigureServices با برقراری تماس با services.AddIdentityServer پیکربندی می کنید.
  3. سرور هویت را با تنظیم داده های زیر پیکربندی می کنید:
  • اعتبار مورد استفاده برای امضا
  • منابع هویت و API که کاربران ممکن است درخواست دسترسی به آنها را داشته باشند:

منابع API نشان دهنده داده ها یا عملکردهای محافظت شده است که کاربر می تواند با یک نشانه دسترسی به آنها دسترسی داشته باشد. نمونه ای از یک منبع API یک وب API (یا مجموعه ای از API ها) است که نیاز به مجوز دارد.

منابع هویتی نشان دهنده اطلاعات (ادعاهایی) است که برای شناسایی کاربر به مشتری داده می شود. این ادعاها ممکن است شامل نام کاربری، آدرس ایمیل و غیره باشد.

  • مشتریانی که برای درخواست توکن به هم متصل می شوند.
  • مکانیسم ذخیره سازی اطلاعات کاربر، مانند ASP.NET Core Identity یا جایگزین.

 

وقتی مشتریان و منابعی را برای استفاده از IdentityServer4 مشخص می‌کنید، می‌توانید یک مجموعه IEnumerable<T> از نوع مناسب را به روش‌هایی ارسال کنید که کلاینت یا منابع ذخیره‌سازی را در حافظه می‌گیرند. یا برای سناریوهای پیچیده تر، می توانید انواع مشتری یا ارائه دهنده منابع را از طریق Dependency Injection ارائه دهید.

یک پیکربندی نمونه برای IdentityServer4 برای استفاده از منابع درون حافظه و کلاینت های ارائه شده توسط یک نوع سفارشی IClientStore ممکن است مانند مثال زیر باشد:

 

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    //...
    services.AddSingleton<IClientStore, CustomClientStore>();
    services.AddIdentityServer()
        .AddSigningCredential("CN=sts")
        .AddInMemoryApiResources(MyApiResourceProvider.GetAllResources())
        .AddAspNetIdentity<ApplicationUser>();
    //...
}

 

توکن های امنیتی را مصرف کنید
احراز هویت در برابر نقطه پایانی OpenID Connect یا صدور توکن‌های امنیتی خود، برخی از سناریوها را پوشش می‌دهد. اما در مورد سرویسی که به سادگی نیاز به محدود کردن دسترسی به آن دسته از کاربرانی دارد که دارای نشانه‌های امنیتی معتبری هستند که توسط یک سرویس دیگر ارائه شده‌اند، چطور؟

برای آن سناریو، میان‌افزار احراز هویت که توکن‌های JWT را مدیریت می‌کند در بسته Microsoft.AspNetCore.Authentication.JwtBearer موجود است. JWT مخفف "JSON Web Token" است و یک قالب رمز امنیتی رایج (تعریف شده توسط RFC 7519) برای برقراری ارتباط ادعاهای امنیتی است. یک مثال ساده از نحوه استفاده از میان افزار برای مصرف چنین توکن هایی ممکن است شبیه این قطعه کد باشد که از ریزسرویس Ordering.Api eShopOnContainers گرفته شده است.

 

// Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    //…
    // Configure the pipeline to use authentication
    app.UseAuthentication();
    //…
    app.UseEndpoints(endpoints =>
    {
        //...
    });
}

public void ConfigureServices(IServiceCollection services)
{
    var identityUrl = Configuration.GetValue<string>("IdentityUrl");

    // Add Authentication services

    services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme;

    }).AddJwtBearer(options =>
    {
        options.Authority = identityUrl;
        options.RequireHttpsMetadata = false;
        options.Audience = "orders";
    });
}

 

پارامترهای این کاربرد عبارتند از:

  • مخاطب نشان دهنده گیرنده توکن ورودی یا منبعی است که توکن به آن دسترسی می دهد. اگر مقدار مشخص شده در این پارامتر با پارامتر موجود در توکن مطابقت نداشته باشد، توکن رد می شود.
  • Authority آدرس سرور احراز هویت صادرکننده رمز است. میان‌افزار احراز هویت حامل JWT از این URI برای دریافت کلید عمومی استفاده می‌کند که می‌تواند برای تأیید اعتبار امضای توکن استفاده شود. میان افزار همچنین تأیید می کند که پارامتر iss در توکن با این URI مطابقت دارد.

پارامتر دیگری، RequireHttpsMetadata، برای اهداف آزمایشی مفید است. شما این پارامتر را روی false قرار می دهید تا بتوانید در محیط هایی که گواهینامه ندارید تست کنید. در استقرارهای دنیای واقعی، توکن های حامل JWT همیشه باید فقط از طریق HTTPS ارسال شوند.

با نصب این میان افزار، توکن های JWT به طور خودکار از سرصفحه های مجوز استخراج می شوند. سپس آنها را از فهرست خارج می کنند، تأیید می کنند (با استفاده از مقادیر موجود در پارامترهای Audience و Authority)، و به عنوان اطلاعات کاربر ذخیره می شوند تا بعداً توسط اقدامات MVC یا فیلترهای مجوز ارجاع داده شوند.

میان‌افزار احراز هویت حامل JWT همچنین می‌تواند از سناریوهای پیشرفته‌تری مانند استفاده از گواهی محلی برای تأیید اعتبار یک توکن در صورت در دسترس نبودن مجوز پشتیبانی کند. برای این سناریو، می توانید یک شی TokenValidationParameters را در شی JwtBearerOptions تعیین کنید.

 

  • ۰۱/۱۱/۲۹
  • sahar saha sql

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی