HardCoded Attribute Mapper
این Mapper یک مقدار ویژگی کدگذاری HardedCoded شده را به هر کاربر Keycloak که با LDAP پیوند داده شده است اضافه می کند. این Mapper همچنین میتواند مقادیری را برای ویژگی های کاربر فعال (Enabled) یا ایمیل تایید شده (Email Verified) اعمال کند.
Role Mapper
این Mapper، نقش ها را از LDAP به Mapper متعلق به Keycloak پیکربندی می کند. یک Mapper می تواند نقش های LDAP را به نقش هایی مربوط به نقش های Realm مشتری یا نقش های مشتری مشخص شده ترسیم کند. میتوان نقش های بیشتری را برای همان ارایه دهنده LDAP پیکربندی کرد.
به عنوان مثال تعیین کنیم که MAPPER نقش از گروه ها در زیر
ou=main,dc=example,dc=org map
به Mapper نقش قلمرو و Mapper نقش از گروه های تحت
ou=finance,dc=example,dc=org map
به نقش مشتری Mapper امور مالی مشتری
نقش نگاشت کدگذاری شده Hardcoded Role Mapper
این Mapper یک نقش Keycloak مشخص به هرکاربر Keycloak از LDAP Provider اعطا می کند.
Group Mapper
این Mapper گروه های LDAP را از شاخه از درخت LDAP به گروه هایی در Keycloak ترسیم میکند . همچنین Mapper های گروه کاربر را از LDAP به MAPPER های گروه کاربر در Keycloak منتشر میکند.
نقشهبردار حساب کاربری MSAD
این Mapper مختص Microsoft Active Directory (MSAD) است. میتواند وضعیت حساب کاربری MSAD را در وضعیت حساب Keycloak، مانند حساب فعال یا رمز عبور منقضی شده، ادغام کند. همچنین از ویژگی های userAccountControl و pwdLastSet LDAP استفاده می کند که مخصوص MSAD هستند و استاندارد LDAP نیستند. به عنوان مثال، اگر مقدار pwdLastSet 0 باشد، کاربر Keycloak باید رمز عبور خود را به روز کند. نتیجه یک اقدام مورد نیاز UPDATE_PASSWORD است که به کاربر اضافه شده است.
اگر مقدار userAccountControl 514 (حساب غیرفعال) باشد، کاربر Keycloak غیرفعال می شود.
Certificate Mapper
این mapper گواهیهای X.509 را نقشهبرداری میکند. Keycloak از آن در ارتباط با احراز هویت X.509 و گواهی کامل در قالب PEM به عنوان منبع هویت استفاده می کند. این Mapper مشابه با User Attribute Mapperعمل می کند، اما Keycloak می تواند ویژگی LDAP را فیلتر کند که گواهی فرمت PEM یا DER را ذخیره می کند. Always Read Value From LDAP را با این نگاشت فعال کنیم.
User Attribute Mapper که ویژگیهای اصلی کاربر Keycloak، مانند نام کاربری، نام، نام خانوادگی و ایمیل را به ویژگیهای LDAP مربوطه Map میکنند. می توانیم این موارد را گسترش داده و Map ویژگی های اضافی خود را ارائه دهیم. Admin Console نکات ابزاری را برای کمک به پیکربندی Mappers های مربوطه ارائه میکند.
Password Hashing
هنگامی که Keycloak رمز عبور را بروز می کند، در واقع Keycloak رمز عبور را در قالب متن ساده ارسال می کند. این عمل با بهروزرسانی رمز عبور در پایگاه داده داخلی Keycloak، که در آن Keycloak رمز عبور را قبل از ارسال به پایگاه داده، هش میکند، متفاوت است. برای LDAP، Keycloak برای هش کردن رمز عبور به سرور LDAP متکی است.
ه طور پیش فرض، سرورهای LDAP مانند MSAD، RHDSیا FreeIPA رمزهای عبور هش هستند. سایر سرورهای LDAP مانند OpenLDAPیا ApacheDS گذرواژهها را به صورت متنی ذخیره میکنند، مگر اینکه از LDAPv3 Password Modify Extended Operation همچنین استفاده می شود.
با بررسی ورودی دایرکتوری تغییر یافته با استفاده از ldapsearch و base64 رمزگشایی مقدار مشخصه userPassword، همیشه بررسی شود که رمزهای عبور کاربر به درستی هش شده و به عنوان متن ساده ذخیره نشده باشند.
Troubleshooting
افزایش سطح گزارش(logging) به TRACE برای دسته org.keycloak.storage.ldap مفید است. با این تنظیمات، بسیاری از پیامهای ثبتنام به لاگ سرور در سطح TRACE ارسال میشوند، از جمله ثبت همه پرسوجوها به سرور LDAP و پارامترهایی که برای ارسال کوئریها استفاده شدهاند. هنگامی که در حال ایجاد هرگونه سوال LDAP در انجمن کاربر یا JIRA هستیم، گزارش سرور را با ثبت TRACE فعال شده پیوست کنید. اگر خیلی بزرگ است، جایگزین خوب این است که فقط قطعه ای از گزارش سرور را با پیام هایی که در حین عملیات به گزارش اضافه شده اند اضافه کنید، که باعث ایجاد مشکلات برای ما می شود.
هنگامی که Provider LDAP را ایجاد می کنیم، پیامی در ورود به سیستم سرور در سطح INFO ظاهر می شود که با:
When you create LDAP provider, message appear in the server log in the INFO level starting with:
Creating new LDAP Store for the LDAP storage provider: ...
پیکربندی Provider LDAP ما را نشان می دهد. قبل از پرسیدن سؤال یا گزارش اشکال، خوب است که این پیام را برای نمایش پیکربندی LDAP خود اضافه کنیم. چراکه برخی از تغییرات پیکربندی را که نمیخواهیم شامل آنها شود، با برخی از مقادیر placeholder جایگزین کنیم. یک مثال bindDn=some-placeholder است. برای ConnectionUrl، میتوان آن را نیز جایگزین کرد، اما به طور کلی مفید است که حداقل پروتکل مورد استفاده (ldap در مقابل ldaps) را درج کنید. به طور مشابه، گنجاندن جزئیات برای پیکربندی Mapper LDAP، که با پیامی مانند این در سطح DEBUG نمایش داده میشوند، میتواند مفید باشد:
Mapper for provider: XXX, Mapper name: YYY, Provider: ZZZ ...
این پیام ها فقط با ورود به سیستم DEBUG فعال نمایش داده می شوند.
پایان بخش Mapper - سید مهدی اخلاقی 25 تیر 1401