Keycloak یا Ory؛ کدوم رو برای احراز هویت انتخاب کنیم؟
خلاصهٔ کاملتر
نویسنده Cerbos (یه پلتفرم مدیریت مجوز) میگه با اینکه Keycloak و Ory رو همیشه با هم مقایسه میکنن، این دو اصلاً از یه جنس نیستن. Keycloak یه سرور جاوایی همهکارهست که SSO (یعنی یه بار لاگین کردن و همهجا وارد شدن)، OAuth 2.0، SAML، کنسول مدیریت و حتی صفحههای لاگین آماده رو یکجا بهت میده. Ory برعکسه؛ بهجای یه سرور، چند سرویس جدا مثل Kratos برای مدیریت هویت، Hydra برای OAuth، و Keto برای مجوزها میده که باید خودت کنارشون بچینی.
فرقشون بیشتر تو صفحه لاگینه. Keycloak صفحه لاگین آماده و قابل تمبندی داره، اما Kratos تو Ory بدون رابط کاربریه و فقط چند نمونه UI میده؛ یعنی باید خودت صفحه لاگین، بازیابی رمز و تایید حساب رو بسازی. به گفته نویسنده، اگه یه تیم پلتفرم با کلی اپلیکیشن مختلف داری و میخوای همهچی سریع سرپا بشه، Keycloak گزینه بهتریه. ولی اگه لاگین بخشی از خود محصولته، Ory کنترل بیشتری میده، هرچند خودت باید همه اون سرویسهای جدا رو نگهداری کنی.
نکته اصلی مقاله اینه که هر دو ابزار یه بخش مجوزدهی (authorization، یعنی تشخیص اینکه کاربر لاگینشده چه کاری حق داره انجام بده) دارن، ولی هیچکدوم کامل نیست. موتور Authorization Services تو Keycloak روی سرور هویت اجرا میشه و به دیتابیس اپلیکیشن دسترسی نداره، پس باید دادهها رو تو Keycloak هم کپی نگه داری. Keto تو Ory از مدل Zanzibar (ذخیره رابطههایی مثل «این کاربر ویرایشگر این سنده») استفاده میکنه که برای سلسلهمراتب خوبه، ولی شرطهایی مثل «فقط تو ساعت اداری» رو خودش نمیفهمه.
نویسنده به یه نمونه واقعی هم اشاره میکنه: سال ۲۰۲۵ یه قابلیت هوش مصنوعی تو یه پلتفرم مدیریت کار معروف باعث شد دادههای حدود هزار مشتری بین سازمانهای مختلف درز کنه، چون درخواستها با اعتبارنامه معتبر میاومدن ولی هیچی چک نمیکرد که اون کاربر خاص واقعاً حق دیدن اون منبع رو داره یا نه. طبق مقاله نه Keycloak و نه Ory این مشکل رو حل نمیکردن، چون این چک اصلاً تو اپلیکیشن نوشته نشده بود.
راهحلی که مقاله (و خود Cerbos) پیشنهاد میده، یه لایه مجوزدهی جدا و مستقله که سیاستها رو با YAML و شرطهای CEL مینویسه و میتونه هم اطلاعات توکن و هم مشخصات منبع رو تو یه قانون واحد چک کنه.
نکات کلیدی:
- Keycloak سرور همهکاره با لاگین و کنسول آمادهست؛ Ory چند سرویس جدا (Kratos، Hydra، Keto) میده که باید خودت کنار هم بچینی.
- مجوزدهی Keycloak روی سرور هویت اجرا میشه و به دیتابیس اپلیکیشن دسترسی نداره؛ Keto از مدل Zanzibar استفاده میکنه.
- هیچکدوم شرط وابسته به وضعیت لحظهای منبع (مثل ساعت کاری) رو پشتیبانی نمیکنه.
- نشتی داده هزار مشتری یه پلتفرم مدیریت کار در ۲۰۲۵ نمونه همین شکافه.
- Cerbos بهعنوان لایه مجوزدهی جدا با YAML و CEL این شکاف رو پر میکنه.




