Keycloak یک راه حل واحد برای برنامه های وب و خدمات وب RESTful است. هدف Keycloak ساده کردن امنیت است به طوری که توسعه دهندگان برنامه به راحتی می توانند برنامه ها و خدماتی را که در سازمان خود مستقر کرده اند ایمن کنند. ویژگیهای امنیتی که توسعهدهندگان معمولاً باید برای خود بنویسند و به راحتی با نیازهای فردی سازمان ما قابل تنظیم هستند. Keycloak رابط های کاربری قابل تنظیم برای ورود، ثبت نام، مدیریت و مدیریت حساب را فراهم می کند. همچنین میتوانید از Keycloak به عنوان یک پلتفرم یکپارچه برای اتصال آن به سرورهای LDAP و Active Directory موجود استفاده کنید. همچنین می توانید احراز هویت را به ارائه دهندگان هویت شخص ثالث مانند فیس بوک و گوگل واگذار کنیم.
عملیات اصلی Keycloak
Keycloak یک سرور جداگانه است که ما در شبکه خود مدیریت می کنیم.
برنامه ها به گونه ای پیکربندی شده اند که به این سرور اشاره کنند و توسط آن ایمن شوند.
Keycloak از استانداردهای پروتکل باز مانند OpenID Connect یا SAML 2.0 برای ایمن سازی برنامه های ما استفاده می کند.
برنامه های مرورگر، مرورگر کاربر را از برنامه به سرور احراز هویت Keycloak هدایت می کنند، جایی که آنها اعتبار خود را وارد می کنند.
این تغییر مسیر مهم است زیرا کاربران کاملاً از برنامه ها جدا هستند و برنامه ها هرگز اعتبار کاربر را نمی بینند. در عوض به برنامهها یک نشانه هویت(Token) داده میشود که به صورت رمزنگاری امضا شده است. این توکن ها می توانند اطلاعات هویتی مانند نام کاربری، آدرس، ایمیل و سایر اطلاعات نمایه داشته باشند. آنها همچنین می توانند داده های مجوز را نگه دارند تا برنامه ها بتوانند تصمیمات مجوز را بگیرند. این توکنها همچنین میتوانند برای فراخوانی امن در سرویسهای مبتنی بر REST استفاده شوند.
مفاهیم اصلی و اصطلاحات اصلی
- Users : کاربران موجودیت هایی هستند که قادر به ورود به سیستم هستند و ویژگی های مرتبط با خود مانند ایمیل، نام کاربری، آدرس، شماره تلفن و تاریخ تولد را داشته باشند. می توان به آنها عضویت گروه اختصاص داد و همچنین نقش های خاصی را به آنها تخصیص داد.
- Authentication : فرآیند شناسایی و اعتبار سنجی یک کاربر
- Authorization : فرآیند اعطای دسترسی به کاربر
- Credentials (اعتبارنامه) : اعتبار بخشی از داده هایی هستند که Keycloak برای تایید هویت کاربر استفاده می کند. به عنوان مثال گذرواژه، رمز عبور یک بار مصرف ، گواهی دیجیتال یا حتی اثر انگشت.
- Roles نقش ها : نقش ها نوع یا دسته ای از کاربر را مشخص می کند.(مدیر، کاربر، کارمند و...)
- User Role Mapping : تخصیص میان نقش و کاربر را تعریف می کند. Role Mapping را میتوان در Tokens و assertions کپسوله کرد تا برنامه ها مجوزهای دسترسی را در منابع مختلفی که مدیریت می کنند تصمیم بگیرند. (امکان تعریف نقش های ترکیبی به عنوان مثال نقش های مدیریت فروش و مدیر ورود سفارش )
- Groups گروه ها : می توان نقش ها را به یک گروه خاص تخصیص داد. کاربرانی که عضو یک گروه می شوند ویژگی ها و نگاشت نقش هایی را که گروه دارد را به ارث می برند.
- Realms (رِلم) قلمرو : یک قلمرو و مجموعه از کاربران ، اعتبارنامه ها(Credentials)، نقش ها و گروه ها را مدیریت می کند. کاربر به یک قلمرو تعلق دارد و وارد آن می شود. قلمرو ها از یکدیگر جدا هستند و فقط می توانند کاربرانی را که کنترل می کنند مدیریت و احراز هویت کنند.
- Clients : موجودیت هایی که می توانند از KeycLoak برای احراز هویت یک کاربر درخواست کنند. اغلب Clients برنامه ها و سرویس هایی هستند که می خواهند از Keycloak برای ایمن کردن خود و از یک Single sign-on استفاده کنند. Clients ها همچنین می توانند موجودیت هایی باشند که فقط می خواهند اطلاعات هویتی یا یک دسترسی را درخواست کنند تا بتوانند به طور ایمن خدمات دیگیری را در شبکه که توسط Keycloak ایمن شده اند فراخوانی کنند.
- Client Adapters : پلاگین های هستند که در محیط برنامه نصب می کنید تا بتوانید با Keycloak ارتباط برقرار کنید و ایمن شوند. Keycloak تعداد آداپتور برای پلتفرم های مختلف دارد که می توان آنها را دانلود کرد .
- Scope محدوده: هنگامی که یک Client ثبت می شود، باید پروتکل و نقش های مورد نظر را برای آن Client تعریف نمود. توصیه می شود scope کاربر را ذخیره کرد تا با به اشتراک گذاشتن برخی تنظیمات مشترک ایجاد Clients جدید را آسان تر نمود. همچنین میتوان برای درخواست برخی Claims و یا نقش ها که به صورت مشروط براساس مقدار پارامتر Scope باشد .
- Access Token : Token که می تواند به عنوان بخشی از درخواست HTTP ارایه شود و به سرویسی که در حال فراخوانی است دسترسی می دهد. این بخشی از مشخصات OpenId Connect و Oauth2.0 است.
- Assertion ادعا : اطلاعات در مورد یک کاربر می باشد. که این معمولا در قالب XML می باشد که در پاسخ احراز هویت SAML گنجانده شده است که به صورت MetaData در مورد یک کاربر تایید شده ارایه می شود.
- Service Account حساب خدمات: هر Client دارای یک حساب سرویس داخلی(Build-in) است که به آن امکان می دهد یک Access Token به دست آورد.
- Direct Grant : یک راه برای یک Client به جهت به دست آوردن Access Token از طرف یک کاربر از طریق فراخوانی REST
- Protocol Mappers : برای هر client می توانید Claims و Assertions ، که در OIDC Token یا SAML Assertion ذخیره می شوند، تنظیم نمود، به ازای هر Client با ایجاد و پیکربندی Protocol mappers انجام داد.
- Session : هنگامی که یک کاربر وارد سیستم می شود، یک Session برای مدیریت Session ایجاد می شود. یک Session حاوی اطلاعاتی مانند زمان ورود کاربر و چه برنامه هایی است که در طی آن Session در یک ورود به سیستم شرکت کرده اند. (ادمین و کاربران می توانند اطلاعات Session را مشاهده کنند).
- User Federation Provider : Keycloak می تواند کاربران را ذخیره و مدیریت کند. بسیاری از شرکت ها قبلا از سرویس LDAP یا Active Directory استفاده می کنند که اطلاعات کاربر و مجوز دسترسی را درون خود ذخیره می کنند. میتوان به Keycloak اشاره (استفاده نمود)کرد تا Credentials (اعتبارنامه های) ذخیره خارجی را تایید کند و اطلاعات هویتی را دریافت کند.
- Identity Provider : IDP : ارایه دهنده هویت سرویسی است که می تواند یک کاربر را احراز هویت کند. Keycloak یک IDP است.
- Identity Provider federation : Keycloak را می توان به گونه ای پیکربندی کرد که احراز هویت را به یک یا چند IDP واگذار کرد. ورود به سیستم اجتماعی از طریق فیسبوک یا Google+ نمونه ای از IPF است. همچنین میتوان Keycloak را به گونه ای تعبیه کرد که احراز هویت را به هر OpenId Connect یا SAML 2.0 IDP دیگری واگذار نمود.
- Identity Provider Mappers : هنگام انجام IDP Federation شما می توانید Tokens و Assertions (ادعاهای) دریافتی را به ویژگی های کاربر و Session تخصیص می دهد. این به ما کمک می کند تا اطلاعات هویتی را از IDP خارجی به Client خود که درخواست احراز هویت می کند منتشر کنیم.
- اقدامات مورد نیاز : ادمین می تواند به عنوان مثال به گونه ای برنامه ریزی کند تا رمزهای عبور خود را بازنشانی کنند.
- Authentication Flows : جریان های کاری هستند که کاربر باید هنگام تعامل با جنبه های خاصی از سیستم انجام دهد. این جریان ها مشخص می کنند که کاربر باید چه اطلاعاتی را وارد کند و آیا چیزی همانند reCAPTCHA باید برای فیلتر کردن ربات ها استفاده شود یا خیر . همچنین سیاست هایی برای تغییر رمز عبور (بازنشانی) صورت می گیرد.
- Events : رویدادها جریان های حسابرسی هستند که مدیران می توانند آن ها را مشاهده کرده و به آنها متصل شوند.
- Themes : هر صفحه نمایش ارایه شده توسط Keycloak توسط یک موضوع پشتیبانی می شود. تم ها قالب ها و شیوه نامه های HTML را تعریف می کنند که می توانید در صورت نیاز آن ها را غیر فعال کنید
در قدم بعد نحوه ایجاد و کاربری با نرم افزار را شرح خواهیم داد. (در یک بخش مجزا نصب keycloak و Docker را توضیح خواهیم داد)