ورود با کوبیت و کلاینت OIDC
«ورود با کوبیت» به سرویس شما اجازه میدهد کاربران سازمان با حساب خود وارد برنامه شما شوند. در این جریان، کوبیت هویت کاربر را تأیید میکند و سرویس شما نتیجه قابل اعتماد دریافت میکند؛ بنابراین لازم نیست سامانه جداگانهای برای نگهداری رمز کاربران بسازید.
این قابلیت برای ورود به خود کوبیت نیست. LDAP و SAML کاربران را وارد کوبیت میکنند، اما کلاینت OIDC کاربران کوبیت را وارد سرویس مشتری میکند.
OIDC چیست؟
OpenID Connect یا OIDC یک پروتکل استاندارد برای ورود کاربران است که روی OAuth 2.0 ساخته شده است. OAuth 2.0 بیشتر درباره اجازه دسترسی است؛ OIDC اطلاعات هویت را نیز به این جریان اضافه میکند.
پس از ورود موفق، سرویس شما یک توکن هویت یا ID Token دریافت میکند. این توکن معمولاً یک JWT امضاشده است و اطلاعاتی مانند شناسه کاربر، صادرکننده و زمان اعتبار را در خود دارد. سرویس باید امضا، صادرکننده، مخاطب و زمان انقضای توکن را بررسی کند.
سه طرف اصلی در این جریان حضور دارند:
- کاربر: عضوی از سازمان که میخواهد وارد سرویس شود.
- کلاینت: برنامه یا سرویس مشتری که ورود را درخواست میکند.
- کوبیت: ارائهدهنده هویت که کاربر را وارد میکند و توکن معتبر میسازد.
جریان ورود چگونه کار میکند؟
در جریان رایج Authorization Code، سرویس کاربر را به صفحه ورود کوبیت میفرستد. کاربر وارد میشود و کوبیت عضویت و دسترسی گروهی او را بررسی میکند.
اگر رضایت کاربر لازم باشد، کوبیت پیش از ادامه اجازه او را میگیرد. سپس مرورگر را همراه یک کد کوتاه و یکبارمصرف به یکی از نشانیهای بازگشت ثبتشده برمیگرداند.
بکاند سرویس، کد را با توکنها مبادله میکند و پس از اعتبارسنجی ID Token، نشست کاربر را در برنامه خودش میسازد. رمز کلاینت فقط در ارتباط امن بکاند استفاده میشود و نباید به مرورگر یا برنامه عمومی فرستاده شود.
پیشنیازها
پیش از ساخت کلاینت، نشانی بازگشت سرویس را مشخص کنید. این نشانی همان مسیری است که کتابخانه OIDC برنامه پس از ورود پاسخ کوبیت را در آن دریافت میکند.
اگر میخواهید فقط بخشی از اعضای سازمان وارد شوند، گروههای مناسب را از قبل بسازید و کاربران را عضو آنها کنید. بخش افزودن و حذف عضو روش انجام این کار را توضیح میدهد.
برای دیدن یا مدیریت کلاینتها نیز باید مجوزهای مربوط به OIDC را داشته باشید. نبودن گزینه OIDC در تنظیمات معمولاً به معنی نداشتن مجوز مشاهده آن است.
ساخت کلاینت OIDC
در پنل، سازمان موردنظر را فعال کنید و از تنظیمات وارد OIDC شوید. گزینه کلاینت جدید را انتخاب کنید.
نام کلاینت
نام برای شناسایی برنامه در پنل و صفحه رضایت استفاده میشود. نام سرویس یا محیط را روشن بنویسید؛ برای نمونه «پنل گزارشگیری» یا «گزارشگیری آزمایشی».
نشانیهای بازگشت
هر نشانی مجاز را در یک ردیف جدا وارد کنید. کوبیت فقط به همین نشانیها بازمیگردد. نشانی درخواست ورود باید با یکی از مقادیر ثبتشده مطابقت داشته باشد.
برای محیط عملیاتی از HTTPS استفاده کنید. نشانی توسعه، آزمایش و تولید را جدا ثبت کنید و نشانیهای قدیمی را پس از پایان استفاده حذف کنید.
نشانی بازگشت را از روی مسیر واقعی کتابخانه یا فریمورک سرویس وارد کنید. افزودن دامنههای عمومی یا مسیرهای غیرضروری، سطح حمله را افزایش میدهد.
محدودکردن دسترسی با گروهها
اگر مدیریت دسترسی با گروهها خاموش باشد، کلاینت ورود را به گروه مشخصی محدود نمیکند. با روشنکردن آن، فقط اعضای گروههای انتخابشده میتوانند از این کلاینت استفاده کنند.
پس از فعالکردن این گزینه، دستکم یک گروه اضافه کنید. اگر فهرست گروههای مجاز خالی باشد، هیچ گروهی اجازه ورود از این مسیر را ندارد.
تغییر اعضای گروه روی دسترسی ورود آنها اثر میگذارد. پیش از حذف یک گروه، بررسی کنید که کلاینتی برای کنترل دسترسی به آن وابسته نباشد.
رضایت کاربر
با فعالکردن نیاز به رضایت کاربر، کوبیت پیش از دادن دسترسی نام کلاینت را به کاربر نشان میدهد و تأیید او را میگیرد. اگر این گزینه خاموش باشد، صفحه رضایت نمایش داده نمیشود.
گزینه استفاده دوباره از رضایت باعث میشود رضایت قبلی برای همان کلاینت ذخیره شود و کاربر در ورودهای بعدی دوباره همان پرسش را نبیند. این گزینه زمانی معنا دارد که گرفتن رضایت فعال باشد.
اطلاعات اتصال کلاینت
پس از ساخت، صفحه جزئیات این مقادیر را نشان میدهد:
- نشانی تنظیمات: سند کشف
OIDCکه نشانیهای ورود، توکن و کلیدهای عمومی را معرفی میکند. - شناسه کلاینت: شناسهای که سرویس در درخواست ورود میفرستد.
- رمز کلاینت: راز مشترک میان بکاند سرویس و کوبیت.
- نشانیهای بازگشت: مسیرهایی که پاسخ ورود میتواند به آنها برگردد.
کتابخانه OIDC سرویس را با نشانی تنظیمات پیکربندی کنید. در بیشتر کتابخانهها، بقیه نشانیها و کلیدهای عمومی از همین سند خوانده میشوند و نیازی به واردکردن دستی آنها نیست.
رمز کلاینت را فقط در فضای امن بکاند یا سامانه مدیریت راز نگه دارید. آن را در کد، مخزن، تصویر، مرورگر یا برنامه موبایل قرار ندهید.
اعتبارسنجی در سرویس مشتری
دریافت توکن بهتنهایی کافی نیست. کتابخانه سرویس باید امضای ID Token را با کلیدهای اعلامشده کوبیت بررسی کند و مطمئن شود صادرکننده و شناسه مخاطب با تنظیمات کلاینت یکساناند.
زمان انقضا و مقدار state را بررسی کنید. در جریانهایی که کتابخانه از nonce و PKCE پشتیبانی میکند، آنها را نیز فعال نگه دارید. این کنترلها از جایگزینی پاسخ و سوءاستفاده از کد ورود جلوگیری میکنند.
برای هر ورود، هویت پایدار کاربر را از ادعاهای استاندارد توکن بگیرید و آن را با یک کاربر داخلی سرویس مرتبط کنید. از نام نمایشی یا ایمیل بهعنوان تنها شناسه دائمی استفاده نکنید؛ این مقادیر ممکن است تغییر کنند.
آزمایش اتصال
ابتدا اتصال را در محیط آزمایشی بررسی کنید. با یک عضو گروه مجاز وارد شوید و بازگشت به سرویس، اعتبار توکن و ساخت نشست را کنترل کنید.
سپس با کاربری بیرون از گروههای مجاز آزمایش کنید. این ورود باید پیش از دسترسی به سرویس متوقف شود. نمایش یا ذخیره توکن و رمز کلاینت در گزارشهای برنامه نیز نباید رخ دهد.
خطاهای رایج
نشانی بازگشت پذیرفته نمیشود
نشانی فرستادهشده از برنامه با مقادیر ثبتشده مقایسه میشود. پروتکل، دامنه، درگاه، مسیر و خط پایانی را بررسی کنید و همان نشانی را در پنل و برنامه قرار دهید.
کاربر اجازه ورود ندارد
اگر مدیریت دسترسی با گروهها فعال است، عضویت کاربر را در یکی از گروههای مجاز بررسی کنید. فعالبودن عضویت سازمانی و درستبودن سازمان انتخابشده نیز لازم است.
مبادله کد با توکن شکست میخورد
شناسه کلاینت، رمز، نشانی بازگشت و نشانی توکن باید با تنظیمات کوبیت هماهنگ باشند. کد ورود کوتاهعمر و یکبارمصرف است؛ تکرار یا استفاده دیرهنگام از آن پذیرفته نمیشود.
توکن معتبر شناخته نمیشود
نشانی تنظیمات، صادرکننده، مخاطب، زمان سیستم و کلیدهای عمومی را بررسی کنید. اعتبارسنجی دستی توکن معمولاً خطاپذیر است؛ از کتابخانه معتبر OIDC برای زبان و فریمورک خود استفاده کنید.
ویرایش یا حذف کلاینت
از صفحه جزئیات میتوانید نام، گروههای مجاز، رضایت و نشانیهای بازگشت را تغییر دهید. هر تغییر میتواند ورود کاربران سرویس را مختل کند؛ ابتدا تنظیمات محیط آزمایشی و تولید را از هم جدا کنید.
حذف کلاینت، ورودهای تازه از آن را متوقف میکند. پیش از حذف، مطمئن شوید سرویس دیگری از همان شناسه استفاده نمیکند. اگر رمز کلاینت افشا شد، استفاده از آن را متوقف و اطلاعات اتصال تازهای جایگزین کنید.