به طور قطع میکرو سرویسها را میتوان آینده نرمافزارهای بزرگ دنیا در نظر گرفت. ضمن اینکه در حال حاضر نیز بسیاری از شرکتهای بزرگ نرمافزارهای خود را به سمت این معماری حرکت دادهاند. در صورتی که میخواهید با معماری میکرو سرویسها بیشتر آشنا شوید میتوانید به مقاله ارائه شده در پستهای قبلی در مورد “میکرو سرویسها: از معماری تا پیادهسازی” مراجعه کنید. در این مقاله سعی شده است این معماری به طور کامل معرفی شود.
امنیت درخواستها
ز تهدیداتی که در این معماری وجود دارد، بحث امنیت سرویسها است. چرا که به دلیل اینکه تعداد سرویسها و پیچیدگی پیادهسازی زیاد است خیلی مهم است که بتوان امنیت سیستم را تضمین کرد. به عبارتی درخواستی که از سمت کاربر میآید کنترل شده و در صورتی که دسترسی لازم را داشت به سمت میکرو سرویس مربوطه هدایت شود. در ادامه مقوله امنیت این معماری و راهکارهای موجود بهتر و دقیقتر بررسی خواهند شد:
یک راهکار خسته کننده این است که امنیت در سطح هر میکرو سرویس رعایت شده و تمامی عملیات امنیتی زیر نظر مدیریت یک سرویس متمرکز در کنار این سرویسها باشد که باید با آن سرویس هماهنگ باشد. ولی راهکار بهتر استفاده از روشهای استاندارد API-Security ارائه شده مثل استفاده از OAuth2 و OpenID Connect است. اما قبل از توضیح این مدل نیاز است تا این دو تکنولوژی کمی بررسی شوند.
- OAuth2: یک پروتکل مجوز دسترسی است. مشتری با سرور احراز اصالت هویت خود را تایید نموده و یک توکن بخصوص تحت عنوان Access Token دریافت میکند. این توکن دسترسی هیچ اطلاعاتی در مورد کاربر یا مشتری ارائه نمیدهد. بلکه تنها از طریق سرور مجوزدهی مورد تایید است و در صورت ارائه به آن سرور اطلاعات کاربر مربوطه را در صورت صحت ارائه میدهد. این مدل تحت عنوان by-reference token نیز شناخته میشوند چرا که در صورتی که توکن افشا شود باز هم هیچ اطلاعاتی را در اختیار سایرین قرار نمیدهد و بهتر از در شبکههای عمومی مورد استفاده قرار بگیرد.
- OpenID Connect: که رفتاری مشابه با OAuth دارد ولی در ازای Access Token سرور احراز اصالت یک ID Token در اختیار قرار میدهد که شامل اطلاعات کاربر است. این مدل که عموما با استفاده از JWT پیادهسازی شده و با استفاده از سرور احراز اصالت تایید میشود تا صحت ارتباط بین سرور و مشتری مورد تایید قرار بگیرد. این توکن که تحت عنوان By-value-token شناخته میشوند دارای اطلاعات کاربر هستند و به همین دلیل بهتر است که تنها در شبکههای داخلی استفاده شوند برای ارتباط بین سرویسهای لوکال.
شکل زیر نحوه استفاده از این استانداردهای امنیتی را نشان میدهد.
با توجه به شکل بالا، میتوان مهمترین قسمتها در پیادهسازی امنیت در میکرو سرویسها را به موارد زیر تقسیم کرد:
- تمامی احراز اصالتها با OAuth و OpenID connect انجام خواهند شد. و در صورتی که کاربری دسترسیهای لازم را داشته باشد، میکرو سرویسها اطلاعات مورد نظر را در اختیار آنها قرار میدهند.
- از مدل پیادهسازی با API-Gateway باید استفاده شود. به این صورت که تنها یک نقطه ورود برای دسترسی کلاینتها به تمامی سرویسها تنها از طریق API Gateway وجود خواهد داشت.
- کاربران به سرور احراز اصالت وصل شده و یک Access Token دریافت میکنند (یک توکن by-reference-token). سپس این توکن را در تمامی درخواستهای خود برای API Gateway ارسال میکنند.
- تبدیل توکنها در سطح درگاه صورت خواهد گرفت. به این صورت که درگاه API-Gateway این توکن Access Token ارائه شده توسط کلاینتها را از درخواستها استخراج میکند و آن را برای سرور احراز اصالت ارسال میکند تا کد jwt (by-value-token) را دریافت کند.
- سپس API Gateway این توکن را همراه با درخواست خود به سرویسهای داخلی ارسال میکند.
- این jwt شامل اطلاعات مورد نیاز کاربر مثل نشست کاربر و غیره است. در صورتی که همه سرویسها (یا حداقل سرویسهایی که به احراز اصالت نیاز دارند) این مکانیزم JWT را متوجه بشوند، از این طریق موفق شدهاید تا اطلاعات کاربران درخواست کننده را بین سرویسها انتقال دهید.
- در سطح هر میکرو سرویس میتوان یک ماژول ساده که این کد jwt را پردازش میکند قرار داد که کار خیلی پیچیدهای نیست.
ممنون خیلی کاربردی بود
مقاله ای مختصر و مفید 👍
مقاله مختصر و مفیدی بود 👍
این احراز هویت دقیق برای کاربران خیلی از مزاحمت هایی که هکرها ایجاد میکنند رو کم میکنه