اخبار، مطالب و رویدادهای مرتبط با توسعه نرم افزار رادکام

ایمن سازی برنامه ها با استفاده از احراز هویت بر مبنای توکن - بخش سوم - آشنایی با IdentityServer

آشنایی با IdentityServer

برای پیاده سازی اعتبار سنجی و تایید هویت بر مبنای توکن، ما با استفاده از یک چارچوب نرم افزاری سورس باز (منبع باز) به نام IdentityServer یک سرویس توکن ایجاد خواهیم کرد. در حال حاضر IdentityServer4 آخرین نسخه توصیه شده برای برنامه های Asp.Net Core است. اجازه دهید قبل از ورود به پیاده سازی، مفاهیم و اصطلاحات اصلی درگیر با موضوع را مرور کنیم.

Get started with IdentityServer - Basic Parts Of Security System

این نمودار قسمت های اصلی سیستم امنیتی ما را نشان می دهد. مشتری نرم افزاری است که توکن های مورد نیاز خود را از IdentityServer درخواست می کند. به عنوان مثال این مشتری می تواند یک برنامه وب یا موبایل باشد. IdentityServer باید بداند که چه مشتریانی مجاز به استفاده از آن هستند. و این کار از طریق ثبت مشتریان در یک مجموعه ای از موجودیت ها و یا یک محل ذخیره سازی انجام می گیرد. این مجموعه می تواند در یک حافظه و یا بانک اطلاعاتی قرار بگیرد.
سپس کاربران نهایی هستند که با برنامه های مشتری در تعامل هستند. آنها همچنین باید توسط IdentityServer ثبت گردند. کاربران با داده های هویتی مانند شناسه منحصر به فرد، نام کاربری و رمز عبور تعریف می شوند. آنها همچنین می توانند یک و یا چند claim مرتبط نیز داشته باشند. منابع مواردی هستند که ما می خواهیم از آنها محافظت کنیم، و آنها به دو دسته هویت (Identity) و API تقسیم می شوند. منابع هویتی همانند claim های کاربر، اطلاعاتی در مورد هویت کاربر هستند. منابع API عملکرد های محافظت شده مانند API های وب می باشند. همچنین منابع باید در یک محل ذخیره سازی در Identity Server ثبت گردند. در کنار دو نوع منبع، دو نوع توکن وجود دارد که باید تولید گردند.
هنگامی که یک کاربر توسط IdentityServer تایید هویت می شود، اطلاعات به توکن هویت (Identity Token) بازگردانده می شوند. هنگامی که دسترسی به یک منبع API درخواست می گردد، توکن دسترسی صادر می گردد. مشتری توکن دسترسی را به API منتقل می کند، که اجازه دسترسی به داده ها یا عملکرد های محافظت شده را می دهد. IdentiyServer از توکن های استاندارد JWT استفاده می کند.
IdentityServer در هسته مرکزی خود، یک میان افزاری است که دو پروتوکل استاندارد OpenID و OAuth 2 را پیاده سازی می کند. OpenID Connect یک پروتوکل تایید اعتبار است و یک افزونه در مراحل بالای OAuth 2 است. OAuth 2 نیز یک استاندارد باز برای تعیین سطوح دسترسی و مجوز است. این تضمین می کند که یک کاربر اجازه دسترسی به یک منبع محافظت شده را دارد. با استفاده از OAuth 2، مشتری می تواند توکن دسترسی را از یک سرویس توکن امنیتی درخواست کند. سپس این توکن ها برای برقراری ارتباط با API ها استفاده می شوند. از طریق پیاده سازی این دو استاندارد، IdentityServer قادر است الزامات امنیتی مربوط به تایید اعتبار و تعیین سطوح دسترسی را  اعمال کند.
حال که در مورد مفاهیم، مطالبی را توضیح دادیم، اجازه دهید با تنظیمات و راه اندازی اولیه شروع کنیم.
ما با اضافه کردن یک پروژه جدید به solution شروع خواهیم کرد. در ادامه یک پروژه وب از نوع Asp.Net Core انتخاب کنید.

Get started with IdentityServer - Add Project To Solution

و یک نام برای آن انتخاب کنید، ما اسم پروژه را Tutorial.AspNetSecurity.TokenService قرار می دهیم. و در این صفحه، گزینه Empty را انتخاب فرمایید.

Get started with IdentityServer - Select Empty Option

در ادامه، ما بسته IdentityServer4 را از طریق مدیریت بسته های  Nuget به پروژه خود اضافه خواهیم کرد. روی پروژه کلیک راست کرده و منوی  Manage Nuget Package را کلیک کنید.

Get started with IdentityServer - Manage Nuget Packages

در پنجره جستجو عبارت IdentityServer4 را وارد نمایید.

Get started with IdentityServer - Type IdentityServer4

پیش بروید و بسته را نصب نمایید.

Get started with IdentityServer - Install IdentityServer4

در صورتی که با خطا مواجه شدید، نسخه دات نت پروژه خود را به نسخه مورد نیاز IdentityServer4 تغییر دهید.
حال ما آماده نوشتن کد های مربوط به ایجاد وابستگی های IdentityServer هستیم.
کلاس startup.cs را که در ریشه پروژه قرار دارد باز کنید و سپس متد  ConfigureServices را پیدا کنید. ما با فراخوانی متد AddIdentityServer ، می توانیم IdentityServer را رجیستر نماییم. سپس متد AddDeveloperSigningCredential را فراخوانی می کنیم، در نسخه های قبلی به جای این متد، متد  AddTemporarySigningCredential وجود داشت.
AddDeveloperSigningCredential یک کلید موقتی در زمان راه اندازی ایجاد می کند، این کلید برای سناریوهای زمان پیاده سازی طراحی شده است،  این کلید ایجاد شده به طور پیش فرض در پوشه محلی قرار خواهد گرفت. AddTemporarySigningCredential  نیز کلید های موقتی را برای توکن های ورود، استفاده آنها و گواهی های داخل حافظه ایجاد می کند. از این متد ها فقط در زمان پیاده سازی و یا دموی نرم افزار که مجوز استفاده از نرم افزار وجود ندارد، استفاده می شود. در محیط واقعی محصول، IdentityServer برای ورود و اعتبار سنجی و تایید توکن های jot نیاز به یک جفت کلید عمومی/خصوصی دارد.
حال به سراغ متد configure می رویم. در این متد می توانیم کدهای اضافه مانند کد زیر را پاک کنیم، این کد توسط قالب های پیش فرض ایجاد پروژه، اضافه می گردد:

app.Run(async context =>
{
    await context.Response.WriteAsync("Hello, World!");
});
ادامه می دهیم و به روال های برنامه IdentityServer را اضافه می کنیم، بدین نحو که در متد Configure کد  app.UseIdentityServer(); را اضافه می کنیم. توصیه می کنیم برای زمان توسعه، به جای استفاده از IIS از میزبانی کنسول(console host) یا به زبان دیگر از میزبانی در خود پروژه استفاده کنیم تا بتوانیم از امکانات خروجی های لاگ لحظه ای استفاده نماییم. ما می توانیم این کار را با تغییر مشخصه راه اندازی در Visual Studio انجام دهیم. برای انجام این کار، به سراغ صفحه تنظیمات و ویژگی های پروژه(project properties) می رویم و سپس به سراغ تب Debug می رویم:

Get started with IdentityServer - Debug Profile Launch
مورد انتخاب شده در منوی آبشاری profile را به خود پروژه تغییر می دهیم و همچنین مورد انتخاب شده در منوی آبشاری Launch را نیز به project تغییر می دهیم. از آنجا که ما نحوه میزبانی پروژه را به خود-میزبانی(self-hosting) تغییر داده ایم، لازم است پورت استفاده شده در App Url را به 5000 تغییر دهیم. نکته ای که باید در نظر داشته باشیم این است که وقتی به محیط واقعی برنامه می رویم باید اطمینان حاصل کنیم که سرویس توکن ما روی اتصال امن HTTPS اجرا می شود. هنوز برای راه اندازی سرویس توکن آماده نیستیم، برای پشتیبانی از سرویس اعتبار سنجی، ابتدا باید Identity Server را پیکربندی نماییم.

 

دانلود کد برنامه LyndaComAspNetCoreSecurity LyndaComAspNetCoreSecurity



منبع:

Lynda.com - ASP.NET.Core.Security


نام را وارد کنید
تعداد کاراکتر باقیمانده: 1000
نظر خود را وارد کنید