برنامه نویسی سیستم های احراز هویت

احراز هویت Authentication و انواع آن آموزش طراحی و برنامه نویسی وب

توسعه‌دهندگان مختلف روش‌های خاصی برای پیاده‌سازی یک سیستم احراز هویت ابداع کرده‌اند که در عمل مخلوط پیچیده‌ای از توکن‌ها، کامپوننت‌ها و مسیریابی برای احراز هویت را تشکیل می‌دهد. در این نوشته قصد داریم یک روش سرراست و منظم را به عنوان مبنایی برای سیستم احراز هویت برای React معرفی کنیم که از React-Router استفاده می‌کند. اگرچه فریمورک ها و کتابخانه های عالی برای مدیریت JWT ها وجود دارد، و در حالی که JWT جای خود را دارد، استفاده از JWT برای احراز هویت ترافیک S2S پیچیده، سنگین است و اعتماد زیادی به توسعه دهندگان برای درست کردن کارها می کند. این پیچیدگی (یا عدم آگاهی) می‌تواند وضعیت امنیتی کلی را کاهش دهد، اگر توسعه‌دهندگان از ویژگی‌های مهم چشم پوشی کنند. توسعه دهندگان همچنین باید این کار را به روشی خاص برای زبان و فریمورک ها انجام دهند (به عنوان مثال، حل آن در PHP با Go یا Node.js متفاوت است).

این ویژگی بهت کمک می‌کنه تا کدهای پروژت رو بهتر مدیریت کنی و در آینده به راحتی بتونی اون‌ها رو به‌روزرسانی و نگهداری کنی. ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی می‌نویسم. Kerberos نام یک پروتکل قابل اعتماد احراز هویت است که توسط انیستیتو تکنولوژی دانشگاه ماساچوست یا همان MIT تحت عنوان پروژه Athena طراحی و تولید شد . در افسانه های یونان باستان Kerberos نام سگ سه سری بود که از دروازه ورود به دنیای زیر زمین نگهبانی می کرد . نرخ توان عملیاتی (throughput) مدت زمانی است که سیستم فرآیند های شناسایی و احراز هویت را برای افراد انجام می دهد .نرخ توان عملیاتی قابل قبول برای اینگوه سیستم های بایومتریک معمولا محدوده 10 عدد عملیات در هر دقیقه می باشد.

یا اینکه شما کارت شناسایی دارید که بعد از وارد کردن کارت شناسایی در دستگاه مربوطه باید اثر انگشت شما نیز تایید شود و این دو با هم تشکیل یک سیستم احراز هویت را می‌دهند. یا اینکه شما کارت شناسایی دارید که بعد از وارد کردن کارت شناسایی در دستگاه مربوطه باید اثر انگشت شما نیز تایید شود و ایندو با هم تشکیل یک سیستم احراز هویت را می دهد. روش احراز هویت در سطح شبکه نیز مانند هر شکل دیگری از احراز هویت، تایید می‌کنند که کاربران همان کسانی هستند که ادعا می‌کنند. در این مورد سیستم، کاربران قانونی را از کاربران غیرقانونی متمایز می‌کنند. رایج‌ترین اشکال آن، روش‌های احراز هویت دو عاملی، توکن‌ها، تشخیص با کامپیوتر و تک امضایی است.

همچنین این امکان رو هم فراهم کرد که اگه یه قابلیت رو نمی‌خوای، بتونی اونو غیرفعال کنی. جی دبلیو تی در واقع یک توکن امنیتی است که بر پایه فرمت JSON ساخته شده است. این توکن حاوی اطلاعات ضروری کاربر مانند شناسه کاربری، نقش‌ها و سطح دسترسی اوست. جی دبلیو تی به سه بخش سربرگ (Header)، بار (Payload) و امضا (Signature) تقسیم می‌شود. بار، اطلاعات کاربر را به صورت JSON در خود جای داده و امضا تضمین‌کننده صحت و درستی اطلاعات است. اکنون که اتصال به پایگاه داده انجام یافته است، یک مدل کاربر برای ذخیره کاربران وارد شده به اپلیکیشن می‌سازیم.

هر دو این فایل‌ها مشابه هستند، اما در ادامه منطق خاص هر یک را جداگانه تعریف می‌کنیم. ما قصد نداریم زیاد وارد مراحل ثبت نام شویم، شما می‌توانید خودتان روی این بخش کار کنید. از آنجا که کاربران باید بتوانند برای ایجاد حساب به این مسیرها دسترسی پیدا کنند، مسیرهای عمومی محسوب می‌شوند. در این مورد، سرویس A از کلیدهای خود برای امضای JWT هایی که به سرویس B (یا هر سرویس دیگری) ارسال می کند، استفاده می کند. سرویس B برای تأیید ارسال سرویس A JWT به کلید عمومی سرویس A (یا کلید متقارن که به دلیل نگرانی های مبادله کلید و جعل هویت خطرناک تر است) نیاز دارد. در واقع، سرویس B به هر کلید عمومی برای هر سرویسی که با استفاده از JWT ها به عنوان اصول احراز هویت فراخوانی می کند، نیاز دارد.

رمزهای عبور به طور ایمن ذخیره می شوند و اغلب از الگوریتم های هش استفاده می کنند. اکنون اگر به آن props رندر نگاه کنید، بدیهی است که باید نوعی کد احراز هویت درون آن داشته باشیم. از آنجا که از Redux استفاده نخواهیم کرد، در سراسر اپلیکیشن خود باید از چیز دیگری برای احراز هویت بهره بگیریم. Context API را می‌توان این چنین تصور کرد که هر داده‌ای که در آن قرار می‌گیرد می‌تواند در درخت React به هر جایی انتقال یابد. این نوع احراز هویت برای شرکت‌هایی که برای تامین امنیت اطلاعات حساس خود و حفاظت از داده‌ها، سیاست کار کردن از راه دور را به کار می‌گیرند اهمیت زیادی دارد.

توی این بخش می‌خوام بهت بگم که چه تفاوت‌ها و شباهت‌هایی بین Laravel Breeze و سایر ابزارهای احراز هویت وجود داره و هرکدوم چطور می‌تونن بهت کمک کنن. اگه تصمیم گرفتی که از Laravel Breeze استفاده کنی، حالا وقتشه که یاد بگیری چطوری اون رو نصب کنی. این بخش بهت کمک می‌کنه تا به راحتی و سریع این پکیج رو راه‌اندازی کنی. Laravel Breeze از نظر رابط کاربری و قابلیت‌های بصری به نسبت ابزارهای پیشرفته‌تر ممکنه کمی محدودتر باشه. اگه بخوای یه رابط کاربری خیلی پیچیده و حرفه‌ای داشته باشی، شاید نیاز باشه که خودت بیشتر روی طراحی و پیاده‌سازی رابط کاربری کار کنی.

انتخاب کتابخانه مناسب به عوامل مختلفی از جمله زبان برنامه‌نویسی مورد استفاده، پیچیدگی پروژه، نیازهای امنیتی و ترجیحات شخصی بستگی دارد. بهتر است قبل از انتخاب، مستندات و مثال‌های هر کتابخانه را به دقت مطالعه کنید. این سرویس یک شاخه ویژه از API فراشناسا است برای آن دسته از مشتریانی که دسترسی به سرویس‌های ثبت‌احوال ندارند. به کمک API سهاب می‌توانید بدون پیاده‌سازی نیازمندی‌های فراشناسا (مانند سرویس‌های استعلام و کال‌بک) از احراز هویت استفاده کنید. در این مطلب نگاه مختصر و شفافی خواهیم داشت به انواع مدل‌های بهره‌برداری از محصول احراز هویت فراشناسا. اِی‌پی‌آی (API)، اِس‌دی‌کِی (SDK) و وب‌ویو (Web View) از جمله این مدل‌ها هستند و در ادامه به‌صورت مختصر نگاهی به هر یک خواهیم داشت.

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

در همین بخش با استفاده از useState hook در فرم Login، حالت (State) را اضافه می‌کنیم و به کاربر امکان می‌دهیم که روی Sign In کلیک کند تا گردش کار Login به راه بیفتد. همچنان که رفته‌رفته وب پیچیده‌تر شده است، این فراخوانی‌ها در یک اپلیکیشن سرور که روی چیزی مانند PHP اجرا می‌شود، پاسخ داده می‌شوند. این سرور صفحه‌های HTML را برای کاربر ساخته و داده‌ها را بازگشت می‌دهد. نکته مهمی که در این فرایند باید در نظر داشت، این است که آن URL خاص که از سوی کاربر بیان می‌شود، مستقیماً به مسیری روی وب‌سرور مرتبط است. بنابراین تولید و بازگشت دادن آن محتوا یک وظیفه واقعی برای وب محسوب می‌شود.

Create-React-App یک پروژه خارق‌العاده است که کارهای زیادی را که برای ایجاد یک اپلیکیشن جدید React مورد نیاز است انجام می‌دهد. این دستور در پس‌زمینه قطعه‌های زیادی را که لازم هستند به خصوص برای ساخت ماژول کنار هم قرار می‌دهد. این موضوع یک مقاله مفصل است، اما در این مقاله باید اشاره کنیم که این دستور به ما امکان می‌دهد که روی خود اپلیکیشن متمرکز شویم و دیگر هیچ نگرانی در مورد پیکربندی نداشته باشیم. برای غواصی عمیق تر، مقاله ها و آموزش های ما در یوتیوب و وبسایت آنوفل را دنبال کنید، ما در لاراول API بررسی کردیم. دیدیم که موارد امنیتی را رعایت نکنیم به چه مشکلاتی مواجه خواهیم شد و برای اینکه با این مشکلات و مواجه نشیم زمان انقضای توکن ها را کمتر کنید و هر بار آن را تغییر دهید. این سیستمی است که می‌تواند صدای شخص را تحلیل کند تا هویت او را تایید کند.

پیش‌تر اشاره کردیم که باید با توجه به هر کاربرد ویژه‌ای که دارید، مناسب‌ترین روش احراز هویت را انتخاب کنید. گزینه‌های بسیار زیادی برای این منظور وجود دارد و ارائه دهندگان خدمات، این گزینه‌ها را بر اساس نیازهای خودشان انتخاب می‌کنند. آنها باید کاربران را احراز هویت کنند تا به پایگاه داده دسترسی یابند، ایمیل دریافت کنند، پرداخت انجام دهند یا از راه دور به سیستم دسترسی یابند. در این سیستم لازم است کاربران دو یا چند عامل تایید هویت را برای کسب دسترسی به سیستم، ارائه کنند. MFA یا احراز هویت چندعاملی می‌تواند جز اصلی یک روش قوی مدیریت دسترسی و هویت باشد. تنظیم صحیح این سیستم برای اهداف امنیتی، هر نوع شانس حمله سایبری موفق را کاهش خواهد داد.

از طرف دیگر، روش‌هایی مانند Single Sign-On (SSO) و احراز هویت چندعاملی (MFA) به‌عنوان تکنیک‌های تکمیلی مورد استفاده قرار می‌گیرند تا سطح امنیتی شبکه افزایش یابد. در این مقاله، به بررسی نحوه عملکرد این پروتکل‌ها، روش‌های کاربردی احراز هویت و بهترین شیوه‌های امنیتی در اکتیو دایرکتوری می‌پردازیم و چالش‌ها و راهکارهای مرتبط با آن‌ها را تحلیل می‌کنیم. برنامه‌نویسی امن به‌دلیل توانایی‌اش در حفاظت از داده‌ها و جلوگیری از حملات سایبری اهمیت بالایی دارد. با شناسایی و رفع آسیب‌پذیری‌ها در مراحل اولیه توسعه، این نوع برنامه‌نویسی می‌تواند از دسترسی غیرمجاز به اطلاعات حساس و سوءاستفاده‌های احتمالی جلوگیری کند و بدین ترتیب اعتبار و شهرت سازمان‌ها حفظ شود. همچنین، پیشگیری از مشکلات امنیتی به کاهش هزینه‌ها و رعایت الزامات قانونی کمک می‌کند و اعتماد کاربران به نرم‌افزارها را افزایش می‌دهد. در نهایت، برنامه‌نویسی امن نه‌ تنها امنیت سیستم‌ها را تقویت می‌کند، بلکه به موفقیت و پایداری بلندمدت کسب‌وکارها نیز ارتباط دارد.

گو یا Golang توسط گوگل طراحی شده و به عنوان یک زبان برنامه‌نویسی مدرن و کارآمد شناخته می‌شود. این زبان به خاطر کتابخانه‌ها و ابزارهای متعدد که به توسعه نرم‌افزارهای امنیتی کمک می‌کند، در حال گسترش در بین متخصصان امنیت قرار دارد. Go به‌خصوص برای ایجاد برنامه‌های سروری که به عملکرد بالا نیاز دارند، مناسب است و به دلیل ساختار ساده و قوی خود می‌تواند به طراحی ابزارهای امنیتی و درک عمیق‌تر از روش‌های حمله کمک کند. قبل از اینکه به پیاده سازی احراز هویت نام کاربری و رمز عبور در برنامه کامل پشته شما بپردازیم. به اطلاع شما می‌رسانم که در این وبلاگ احراز هویت نام کاربری و رمز عبور با احراز هویت ایمیل و رمز عبور موجود را پیاده‌سازی می‌کنیم. به طوری که کاربر می تواند با استفاده از ایمیل یا نام کاربری وارد سیستم شود.

همچنین زبان‌هایی مانند Ruby و Go نیز به خاطر امکاناتشان در ساخت ابزارهای امنیتی مورد توجه قرار می‌گیرند. این اصل بیان می‌کند که به هر کاربر یا فرآیند باید فقط حداقل سطح دسترسی لازم برای انجام وظیفه‌اش داده شود. به سمت خود حرکت کنید sign-up مسیر و sign-in مسیر و سعی کنید ابتدا کاربر را با ایمیل، نام و رمز عبور ثبت نام کنید و سپس از ایمیل یا نام کاربری استفاده کنید. SAML (Security Assertion Markup Language) یک پروتکل مبتنی بر XML است که برای احراز هویت و مجوز در سیستم‌های مبتنی بر وب طراحی شده است. Taylor Otwell، خالق لاراول، در یکی از پادکست‌هاش گفت که همیشه از اینکه حتی خودش از قابلیت احراز هویت Laravel/ui استفاده نمی‌کرد، ناراحت بود.

احراز هویت و OAuth اجزای ضروری توسعه وب مدرن هستند که پایه و اساس تعاملات امن با کاربر و به اشتراک گذاری داده ها را فراهم می کنند. با پیاده سازی مکانیزم های احراز هویت قوی و استفاده از OAuth برای ادغام های شخص ثالث ایمن، توسعه دهندگان می توانند ضمن محافظت از اطلاعات حساس، با کاربران اعتماد کنند. همانطور که تکنولوژی در حال تکامل است، آگاه ماندن در مورد شیوه های امنیتی در حال ظهور تضمین می کند که برنامه های کاربردی وب شما در برابر تهدیدات انعطاف پذیر هستند. مش سرویس احراز هویت سرویس به سرویس را ساده می‌کند و به توسعه‌دهندگان اجازه می‌دهد تا روی منطق کسب‌وکار خود تمرکز کنند، نه اینکه JWT‌ها و مطالب مخفی را (امیدوارم) به درستی درگیر کنند. همانطور که یک درگاه API باید برای مدیریت امنیت برای ترافیک شمال/جنوب و ورودی استفاده شود، یک سرویس مش باید برای ترافیک شرق/غرب و S2S استفاده شود.

به این منظور باید مراحلی که در بخش بعدی توضیح داده شده است را طی کنید.

این نوع از احراز هویت برای این منظور استفاده می‌شود که اطمینان دهد کسی از داده‌های دیگران برای انجام معاملات آنلاین استفاده نمی‌کند. رایج‌ترین روش‌های آن ایمنی سه بعدی، مقدار تایید کارت و تایید آدرس هستند. چالش‌های رایجی مانند مدیریت حساب‌های کاربری، جلوگیری از نفوذ، و یکپارچگی دستگاه‌های متصل به شبکه، همچنان برای سازمان‌ها دغدغه‌ساز هستند. با این وجود، به‌کارگیری بهترین شیوه‌ها، نظیر مانیتورینگ مستمر، اجرای سیاست‌های قوی رمز عبور، و ایجاد رویکردهایی مبتنی بر اصول دسترسی حداقلی، می‌تواند این چالش‌ها را مدیریت کند. MFA با ترکیب چندین عامل احراز هویت (مانند رمز عبور، تأیید هویت بیومتریک یا کدهای یکبارمصرف) یکی از مؤثرترین روش‌ها برای کاهش خطر حملات است.

در ادامه مقدار context را دوباره روی False قرار دهید تا به بخش بعدی برویم. در کد فوق از قلابمان استفاده می‌کنیم و هر مقداری که در AuthContext جمع‌آوری شده را دریافت می‌کنیم. این بدان معنی است که isAuthenticated همواره نادرست خواهد بود و از این رو زمانی که به منطق prop رندر مسیر ما برخورد کند، ما را به صفحه Home هدایت می‌کند. در ادامه این مورد را روی صفحه login تنظیم می‌کنیم اما در حال حاضر اگر آن را تست کنید، نمی‌توانید به صفحه Admin برسید و در صفحه Home گیر می‌کنید. در صورت چرخش برنامه ریزی شده یا لغو برنامه ریزی شده کلیدهایی که STS برای امضای JWT ها استفاده می کند، سرویس B (یا هر سرویسی که برای تأیید به STS متکی است) باید بتواند کلیدهای عمومی امضای به روز شده را مدیریت کند.

به دلیل اینکه رمز عبور کاربر برای برقراری درخواست کنترل سرویس Kerberos مورد استفاده قرار می گیرد ، حملاتی از نوع حدس زدن رمز عبور یا Password Guessing نیز می تواند در این میان انجام شود . حتی کلیدهایی که برای تبادل اطلاعات در Kerberos استفاده می شود دارای نقاط ضعف امنیت هستند . تمامی کلید های سری کلاینت ها بصورت موقتی بر روی خود کامپیوتر کلاینت و یا سرورها درخواست کنند قرار می گیرند و امکان دستکاری و سوء استفاده از این کلید ها بسیار محتمل است. قابلیت Single Sign On یا SSO برای برطرف کردن مشکل ورود کاربر با نامهای کاربری و رمزهای عبور متعدد به سیستم های مختلف برای دسترسی به منابع را برطرف می کند. برای مثال در این نوع از احراز هویت از الگوی اثر انگشت ، الگوی صدای شخص ، الگوی مردمک و عنبیه چشم ، الگوی کف دست ، الگوی DNA و ... مشکلاتی که در استفاده از این روش احراز هویت وجود دارد این است که ممکن است ما مواردی false positive و مواردی false negative داشته باشیم که به معنی وجود اشتباهات در سیستم احراز هویت است .

قصد داریم در این بخش نوعی احراز هویت مقدماتی به وب اپلیکیشن خود اضافه کنیم. البته قرار نیست به صورت عمیقی وارد مباحث امنیتی شویم، چون این موضوع نیازمند یک مقاله مفصل جداگانه‌ای است. در حال حاضر قصد داریم یک سیستم توکن ایجاد کنیم که با یک نام کاربری و رمز عبور یک نقطه انتهایی login را فراخوانی کند و آن توکن‌ها را در state و همچنین در local storage ذخیره نماید. زمانی که از یک صفحه مسیر خصوصی بازدید می‌کنیم به بررسی state برای توکن می‌پردازیم. هان طور که می‌دانید بسیاری از قطعات این پازل را در بخش‌های قبلی آماده کرده‌ایم اینک باید منطق آن را تنظیم کنیم. دوره آموزش رایگان Identity در ASP.NET Core برای تمامی برنامه‌نویسانی که به دنبال تقویت مهارت‌های خود در زمینه امنیت و مدیریت دسترسی کاربران هستند، بسیار مناسب است.

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

برای مثال در این نوع از احراز هویت از الگوی اثر انگشت‌، الگوی صدای شخص‌، الگوی مردمک و عنبیه چشم‌، الگوی کف دست‌، الگوی DNA و‌... SESAME از الگوریتم های Hashing یک طرفه MD5 و crc32 در عملیات خود استفاده می کند. علاوه بر این SESAME دو certificate و یا Ticket را با یکدیگر ترکیب می کند. یکی از این Certificate ها سرویس احراز هویت همانند پروتکل Kerberos انجام می دهد و دیگری سطح دسترسی های کاربر را که به وی اختصاص داده شده است را تعیین می کند. یکی از نقاط ضعفی که در SESAME وجود دارد این است که این سیستم احراز هویت را صرفا با بلوک اول پیغام انجام می دهد و از کل پیغام برای احراز هویت استفاده نمی کند.

این ابزار بیشتر برای پروژه‌هایی که نیاز به احراز هویت API دارن مناسبه. اگه پروژت نیاز به احراز هویت کاربرها از طریق API داره، Passport انتخاب مناسبیه. اما اگه یه راه‌حل سریع و ساده برای سیستم احراز هویت کلاسیک می‌خوای، Breeze بهتره. Laravel Breeze بهت اجازه می‌ده تا بخش‌های مختلف سیستم احراز هویت رو به راحتی سفارشی‌سازی کنی. این انعطاف‌پذیری بهت کمک می‌کنه تا سیستم احراز هویت رو دقیقاً مطابق با نیازهای پروژت پیاده‌سازی کنی.

با توجه به هر مورد کاربرد، این اعتبارنامه می‌تواند به شکل گذرنامه، زیست‌سنجی، توکن دیجیتالی، گواهینامه دیجیتالی و غیره باشد. SQL (Structured Query Language) زبان اصلی برای مدیریت پایگاه داده‌ها است و به طور گسترده‌ای برای ذخیره و بازیابی اطلاعات از بانک‌های اطلاعاتی استفاده می‌شود. با این حال، یکی از بزرگ‌ترین خطرات امنیتی در این حوزه، حملات تزریق SQL است، که مجرمین سایبری می‌توانند از آن برای دسترسی غیرمجاز به داده‌ها استفاده کنند. به همین دلیل، آشنایی و تسلط بر SQL برای متخصصان امنیت سایبری ضروری است تا بتوانند ایمنی داده‌ها را تضمین کنند و نقاط ضعف را شناسایی کنند. JWT مخفف ( Json Web Token ) است که برای احراز هویت کاربران به روش توکن استفاده می‌شود. در فیلمی که در ابتدای این صفحه آپلود شده است کامل به بررسی JWT پرداخته شده است.


برنامه نویسی درسی