OpenID Connect — OAuth 2.0 ustida qurilgan authentication qatlami. U foydalanuvchining kimligini aniqlash va tizimga tashqi identity provider orqali kirishini standartlashtirish uchun ishlatiladi.
OpenID Connect ko‘pincha “Google orqali kirish”, “Microsoft orqali kirish”, “Apple bilan login” va korporativ SSO tizimlarida uchraydi.
Vazifasi
OpenID Connect foydalanuvchini tashqi identity provider orqali autentifikatsiya qilish uchun ishlatiladi.
OpenID Connect quyidagi vazifalarni bajaradi:
- foydalanuvchi kimligini tasdiqlash;
- tashqi provider orqali login qilish;
- ID token olish;
- foydalanuvchi profil ma’lumotlarini olish;
- OAuth 2.0 authorization oqimiga authentication qatlamini qo‘shish;
- SSO tizimlarini tashkil qilish;
- web, mobile va SPA ilovalarda login jarayonini standartlashtirish;
- identity provider va client ilova o‘rtasida foydalanuvchi ma’lumotini uzatish.
Masalan, foydalanuvchi Google akkaunti orqali saytga kirsa, sayt OpenID Connect orqali uning kimligini tasdiqlashi mumkin.
OpenID Connect qanday ishlaydi?
OpenID Connect OAuth 2.0 oqimidan foydalanadi, lekin unga foydalanuvchi identity’sini tasdiqlovchi ID token tushunchasini qo‘shadi.
Oddiy jarayon:
- foydalanuvchi “Google orqali kirish” tugmasini bosadi;
- client foydalanuvchini identity provider sahifasiga yuboradi;
- foydalanuvchi login qiladi;
- provider foydalanuvchidan ruxsat oladi;
- client authorization code oladi;
- client token endpoint orqali tokenlarni oladi;
- ID token orqali foydalanuvchi kimligi tekshiriladi;
- tizim foydalanuvchi uchun session yoki local token yaratadi.
OpenID Connect authentication jarayonini standart formatga keltiradi.
OAuth va OpenID Connect farqi
OAuth va OpenID Connect bir-biriga bog‘liq, lekin maqsadi farq qiladi.
- OAuth 2.0 — authorization protokoli;
- OpenID Connect — authentication qatlami;
- OAuth clientga resursga kirish ruxsatini beradi;
- OpenID Connect foydalanuvchi kimligini tasdiqlaydi;
- OAuth access token bilan ishlaydi;
- OpenID Connect ID token tushunchasini qo‘shadi.
Masalan, OAuth ilovaga Google Calendar ma’lumotlarini o‘qish ruxsatini berishi mumkin, OpenID Connect esa foydalanuvchi kimligini aniqlash uchun ishlatiladi.
ID token
ID token — OpenID Connect’da foydalanuvchi kimligi haqida ma’lumot beradigan token. ID token odatda JWT formatida bo‘ladi.
ID token ichida quyidagilar bo‘lishi mumkin:
- foydalanuvchi ID’si;
- email;
- ism;
- avatar;
- issuer;
- audience;
- token yaratilgan vaqt;
- token tugash vaqti;
- authentication vaqti.
ID token API resurslariga kirish uchun emas, foydalanuvchi identity’sini tasdiqlash uchun ishlatiladi.
Access token
OpenID Connect OAuth 2.0 ustida ishlagani uchun access token ham ishlatilishi mumkin. Access token resource server yoki userinfo endpointga murojaat qilish uchun kerak bo‘ladi.
Access token quyidagilar uchun ishlatiladi:
- userinfo endpointdan ma’lumot olish;
- API resurslarga kirish;
- scope asosida ruxsatlarni boshqarish;
- OAuth authorization jarayonini davom ettirish.
ID token foydalanuvchi kimligini bildirsa, access token resurslarga kirish uchun ishlatiladi.
Refresh token
Refresh token — access token muddati tugaganda yangi access token olish uchun ishlatiladigan token. OpenID Connect oqimida refresh token uzoqroq login sessiyasini saqlash uchun ishlatilishi mumkin.
Refresh token quyidagi jarayonda ishlaydi:
- foydalanuvchi login qiladi;
- client access token va refresh token oladi;
- access token muddati tugaydi;
- client refresh token orqali yangi access token oladi;
- foydalanuvchi qayta login qilmasdan davom etadi.
Refresh token berilishi provider va scope sozlamalariga bog‘liq bo‘ladi.
UserInfo endpoint
UserInfo endpoint — OpenID Connect’da foydalanuvchi profili haqida qo‘shimcha ma’lumot qaytaradigan endpoint.
UserInfo endpoint quyidagilarni qaytarishi mumkin:
Client access token orqali UserInfo endpointga murojaat qilib, foydalanuvchi profili haqida ma’lumot oladi.
Scope
OpenID Connect’da scope client qaysi identity ma’lumotlarini so‘rayotganini bildiradi.
Keng ishlatiladigan scope’lar:
openid;profile;email;phone;address;offline_access.
openid scope’i OpenID Connect oqimini ishga tushirish uchun asosiy scope hisoblanadi.
OpenID scope
openid scope’i OpenID Connect ishlayotganini bildiradi. Agar authorization request ichida openid scope’i bo‘lmasa, provider odatda oddiy OAuth 2.0 oqimi sifatida ishlashi mumkin.
openid scope’i orqali:
- ID token so‘raladi;
- authentication qatlami yoqiladi;
- foydalanuvchi identity’si tasdiqlanadi;
- OpenID Connect claimlari ishlatiladi.
Bu scope OpenID Connect’ning asosiy belgilaridan biridir.
Profile scope
profile scope’i foydalanuvchining umumiy profil ma’lumotlarini olish uchun ishlatiladi.
Profile scope orqali olinadigan ma’lumotlar:
- ism;
- familiya;
- to‘liq ism;
- avatar;
- username;
- profil URL;
- gender;
- tug‘ilgan sana;
- vaqt zonasi;
- locale.
Provider har doim ham barcha ma’lumotlarni qaytarmasligi mumkin.
Email scope
email scope’i foydalanuvchining email manzili bilan bog‘liq ma’lumotlarni olish uchun ishlatiladi.
Email scope orqali quyidagilar olinishi mumkin:
Login tizimlarida email foydalanuvchi akkauntini ichki tizim bilan bog‘lash uchun ishlatilishi mumkin.
Claims
Claims — ID token yoki UserInfo response ichidagi foydalanuvchi haqidagi ma’lumot maydonlari.
OpenID Connect claimlariga misollar:
sub;name;given_name;family_name;email;email_verified;picture;locale;updated_at.
Claimlar foydalanuvchi identity’sini ifodalash uchun ishlatiladi.
Sub claim
sub — subject claim, ya’ni provider ichida foydalanuvchining noyob identifikatori. OpenID Connect’da sub juda muhim claim hisoblanadi.
sub xususiyatlari:
- foydalanuvchini provider ichida noyob aniqlaydi;
- odatda o‘zgarmas identifikator bo‘ladi;
- email o‘zgarsa ham
subo‘zgarmasligi mumkin; - local akkaunt bilan bog‘lashda ishlatiladi.
Masalan, tizim Google’dan kelgan sub qiymatini local user yozuvi bilan bog‘lashi mumkin.
Issuer
Issuer — ID tokenni bergan identity provider. JWT claimlarida u iss orqali ko‘rsatiladi.
Misol:
"iss": "https://accounts.google.com"
Issuer token qaysi provider tomonidan berilganini aniqlash uchun ishlatiladi.
Audience
Audience — ID token qaysi client uchun mo‘ljallanganini bildiradi. JWT claimlarida aud orqali ko‘rsatiladi.
Audience odatda client ID bilan mos keladi.
Masalan:
"aud": "client_123"
Client ID mos kelmasa, token boshqa ilova uchun berilgan bo‘lishi mumkin.
Nonce
Nonce — authentication request va ID token o‘rtasida bog‘lanishni saqlash uchun ishlatiladigan tasodifiy qiymat.
Nonce quyidagilar uchun ishlatiladi:
- replay attack xavfini kamaytirish;
- login requestni ID token bilan bog‘lash;
- browser oqimlarida xavfsizlikni oshirish;
- tokenni noto‘g‘ri request bilan ishlatishni cheklash.
Nonce qiymati requestda yuboriladi va ID token ichida qaytishi mumkin.
State parameter
State — OAuth va OpenID Connect oqimida request va callbackni bog‘lash uchun ishlatiladigan parametr.
State quyidagi vazifalarni bajaradi:
- CSRFga o‘xshash hujumlarni kamaytirish;
- login oqimini asl request bilan bog‘lash;
- foydalanuvchini login tugagach kerakli sahifaga qaytarish;
- noto‘g‘ri callbacklarni aniqlash.
State odatda tasodifiy va vaqtinchalik qiymat bo‘ladi.
Authorization Code Flow
Authorization Code Flow — OpenID Connect’da keng ishlatiladigan login oqimi. Bu oqimda client avval authorization code oladi, keyin uni tokenlarga almashtiradi.
Jarayon:
- client authorization endpointga so‘rov yuboradi;
- foydalanuvchi login qiladi;
- provider authorization code qaytaradi;
- client code orqali token endpointdan token oladi;
- ID token tekshiriladi;
- foydalanuvchi tizimga kiritiladi.
Bu oqim server-side web ilovalar va PKCE bilan public clientlar uchun ishlatiladi.
Authorization Code Flow with PKCE
Authorization Code Flow with PKCE — public clientlar uchun xavfsizroq OpenID Connect oqimi. SPA va mobile ilovalarda keng qo‘llanadi.
PKCE jarayonida:
- client code verifier yaratadi;
- undan code challenge hosil qiladi;
- authorization requestda code challenge yuboriladi;
- token olishda code verifier yuboriladi;
- provider code verifier va challenge mosligini tekshiradi;
- mos bo‘lsa tokenlar qaytariladi.
PKCE client secret saqlay olmaydigan ilovalarda authorization code oqimini himoyalash uchun ishlatiladi.
Implicit Flow
Implicit Flow — OpenID Connect’ning eski browser-based oqimlaridan biri. Bu oqimda tokenlar to‘g‘ridan-to‘g‘ri browserga qaytarilgan.
Implicit Flow xususiyatlari:
- ID token yoki access token frontendga bevosita qaytariladi;
- authorization code ishlatilmaydi;
- browser fragment orqali token qaytishi mumkin;
- zamonaviy ilovalarda Authorization Code Flow with PKCE ko‘proq ishlatiladi.
Implicit Flow tarixiy jihatdan muhim, lekin yangi tizimlarda kamroq uchraydi.
Hybrid Flow
Hybrid Flow — authorization code va tokenlarni birgalikda qaytarishi mumkin bo‘lgan OpenID Connect oqimi.
Hybrid Flow quyidagi holatlarda ishlatilishi mumkin:
- frontend va backend birga token olishi kerak bo‘lsa;
- ayrim enterprise identity tizimlari;
- maxsus authentication oqimlari;
- legacy tizimlar.
Hybrid Flow OpenID Connect’da mavjud oqimlardan biridir.
Discovery document
Discovery document — OpenID Connect provider sozlamalari haqida ma’lumot beradigan JSON hujjat.
Discovery document ichida quyidagilar bo‘ladi:
- authorization endpoint;
- token endpoint;
- userinfo endpoint;
- JWKS URI;
- issuer;
- qo‘llab-quvvatlanadigan scope’lar;
- qo‘llab-quvvatlanadigan algoritmlar;
- logout endpointlar.
Bu hujjat provider bilan avtomatik integratsiya qilishda ishlatiladi.
JWKS
JWKS — JSON Web Key Set. Bu public keylar to‘plami bo‘lib, ID token yoki JWT imzosini tekshirish uchun ishlatiladi.
JWKS orqali client:
- provider public keylarini oladi;
- ID token signature’ni tekshiradi;
- key rotation holatini qo‘llab-quvvatlaydi;
- token qaysi key bilan imzolanganini aniqlaydi.
JWKS URI odatda discovery document ichida ko‘rsatiladi.
Key rotation
Key rotation — identity provider imzolash kalitlarini vaqti-vaqti bilan yangilash jarayoni.
Key rotation quyidagilarni ta’minlaydi:
- eski kalitlarni almashtirish;
- token imzosini yangi kalit bilan yaratish;
- JWKS orqali public keylarni yangilash;
- xavfsizlik siyosatini qo‘llash.
Client ID token tekshirishda JWKS’dan yangi kalitlarni olishi mumkin.
Identity provider
Identity provider — foydalanuvchi kimligini tasdiqlaydigan xizmat. OpenID Connect’da identity provider login, token berish va userinfo ma’lumotlarini qaytarish vazifasini bajaradi.
Identity provider misollari:
Identity provider foydalanuvchi akkauntlarini markazlashtirilgan holda boshqaradi.
Relying party
Relying party — identity provider orqali foydalanuvchini autentifikatsiya qiladigan ilova. OAuth terminida bu clientga yaqin tushuncha hisoblanadi.
Relying party quyidagilarni bajaradi:
- foydalanuvchini providerga yo‘naltiradi;
- authorization code oladi;
- ID tokenni oladi;
- ID tokenni tekshiradi;
- foydalanuvchi akkauntini local tizim bilan bog‘laydi;
- session yaratadi.
Masalan, Google orqali login qo‘shilgan web sayt relying party hisoblanadi.
Client ID
Client ID — OpenID Connect providerda ro‘yxatdan o‘tgan ilovaning identifikatori. Client ID authorization requestda yuboriladi.
Client ID quyidagilar uchun ishlatiladi:
- ilovani aniqlash;
- audience claim bilan bog‘lanish;
- redirect URI’ni tekshirish;
- consent screen’da ilovani ko‘rsatish;
- tokenlar qaysi clientga tegishli ekanini aniqlash.
Client ID maxfiy qiymat hisoblanmaydi.
Client secret
Client secret — confidential clientlar uchun ishlatiladigan maxfiy kalit. Server-side web ilovalar token endpointga murojaat qilganda client secret ishlatishi mumkin.
Client secret quyidagi holatlarda ishlatiladi:
- backend web app;
- server-side token exchange;
- confidential client authentication;
- OAuth clientni tekshirish;
- token endpoint xavfsizligi.
SPA va mobile ilovalarda client secret xavfsiz saqlanmagani uchun odatda PKCE ishlatiladi.
Redirect URI
Redirect URI — foydalanuvchi login qilgandan keyin provider qaytaradigan callback manzil.
Redirect URI quyidagilar uchun ishlatiladi:
- authorization code qabul qilish;
- login oqimini davom ettirish;
- clientni tekshirish;
- noto‘g‘ri callback manzilga token yoki code ketishini oldini olish.
Provider odatda redirect URI’ni oldindan ro‘yxatga olingan manzillar bilan solishtiradi.
Single Sign-On
Single Sign-On yoki SSO — foydalanuvchi bitta identity provider orqali bir nechta ilovaga kirishi mumkin bo‘lgan tizim.
SSO quyidagilarni ta’minlaydi:
- bitta login orqali bir nechta service;
- markaziy foydalanuvchi boshqaruvi;
- korporativ authentication;
- session sharing;
- enterprise access management;
- foydalanuvchi uchun yagona identity.
OpenID Connect SSO tizimlarida keng qo‘llanadi.
Logout
OpenID Connect’da logout foydalanuvchini client ilovadan yoki identity provider sessiyasidan chiqarish bilan bog‘liq bo‘lishi mumkin.
Logout turlari:
- local logout;
- provider logout;
- single logout;
- front-channel logout;
- back-channel logout;
- RP-initiated logout.
Logout oqimi identity provider va clientlar orasidagi sessionlarni boshqarish uchun ishlatiladi.
Front-channel logout
Front-channel logout — browser orqali client ilovalarga logout holatini yetkazish usuli.
Bu jarayonda:
- foydalanuvchi providerda logout qiladi;
- provider browser orqali clientlarga signal yuboradi;
- clientlar local sessionni tugatadi;
- foydalanuvchi bir nechta ilovadan chiqarilishi mumkin.
Front-channel logout browser asosida ishlaydi.
Back-channel logout
Back-channel logout — identity provider serverdan client serverga bevosita logout xabarini yuboradigan usul.
Back-channel logout xususiyatlari:
- browserga tayanmaydi;
- server-to-server aloqa ishlatiladi;
- client sessionni backendda tugatadi;
- enterprise SSO tizimlarida ishlatilishi mumkin.
Bu logout turi distributed login tizimlarida session boshqaruvi uchun ishlatiladi.
OpenID Connect va web ilova
Web ilovalarda OpenID Connect foydalanuvchini tashqi provider orqali login qilish uchun ishlatiladi.
Web ilova jarayoni:
- foydalanuvchi login tugmasini bosadi;
- ilova providerga redirect qiladi;
- provider foydalanuvchini tasdiqlaydi;
- callback orqali authorization code qaytadi;
- backend tokenlarni oladi;
- ID token tekshiriladi;
- local session yaratiladi.
Server-side web ilovalarda session va OpenID Connect birga ishlatilishi mumkin.
OpenID Connect va SPA
SPA ilovalarda OpenID Connect browser ichida ishlaydigan frontend bilan bog‘liq. Bunda PKCE va browser xavfsizlik sozlamalari muhim bo‘ladi.
SPA’da OpenID Connect quyidagilar bilan ishlaydi:
- Authorization Code Flow with PKCE;
- redirect URI;
- access token;
- ID token;
- browser storage;
- CORS;
- silent login;
- token refresh.
SPA public client hisoblanadi, chunki client secretni xavfsiz saqlay olmaydi.
OpenID Connect va mobile ilova
Mobile ilovalarda OpenID Connect foydalanuvchini system browser yoki external browser orqali login qilishda ishlatiladi.
Mobile oqimda quyidagilar uchraydi:
- PKCE;
- deep link;
- universal link;
- app link;
- secure storage;
- refresh token;
- biometric unlock;
- external browser session.
Mobile ilovalar ham public client hisoblanadi.
OpenID Connect va API
OpenID Connect foydalanuvchini autentifikatsiya qiladi, API esa access token orqali resurslarga kirishni boshqarishi mumkin.
API bilan bog‘liq jarayon:
- client access token yuboradi;
- API tokenni tekshiradi;
- issuer va audience mosligini tekshiradi;
- scope yoki permission tekshiriladi;
- foydalanuvchi identity’si aniqlanadi;
- so‘rov bajariladi.
ID token odatda API access uchun ishlatilmaydi, access token ishlatiladi.
OpenID Connect va JWT
OpenID Connect’da ID token odatda JWT formatida bo‘ladi. Shu sababli JWT validation OpenID Connect xavfsizligining muhim qismidir.
JWT orqali quyidagilar tekshiriladi:
- signature;
- issuer;
- audience;
- expiration;
- nonce;
- subject;
- authentication vaqti;
- algoritm.
ID token JWT bo‘lgani uchun uni faqat decode qilish emas, verify qilish ham kerak bo‘ladi.
OpenID Connect xavfsizligi
OpenID Connect xavfsizligi token, redirect URI, client konfiguratsiyasi va provider tekshiruvlariga bog‘liq.
OpenID Connect xavfsizligida quyidagilar muhim:
- ID token signature’ni tekshirish;
- issuer mosligini tekshirish;
- audience client ID bilan mosligini tekshirish;
- token expirationni tekshirish;
- nonce ishlatish;
- state parametrini tekshirish;
- redirect URI’ni qat’iy belgilash;
- PKCE ishlatish;
- client secretni himoyalash;
- HTTPS ishlatish.
Bu elementlar login oqimining yaxlitligini saqlash uchun ishlatiladi.
Dasturlashdagi o‘rni
OpenID Connect zamonaviy authentication tizimlarida foydalanuvchini tashqi identity provider orqali tizimga kiritish uchun ishlatiladigan asosiy standartlardan biridir. U OAuth 2.0 imkoniyatlariga foydalanuvchi identity’sini tasdiqlash qatlamini qo‘shadi.
OpenID Connect quyidagi loyihalarda uchraydi:
- Google orqali login;
- Microsoft orqali login;
- Apple bilan login;
- enterprise SSO;
- SaaS platformalar;
- admin panellar;
- mobile ilovalar;
- SPA frontendlar;
- korporativ portallar;
- API gateway tizimlari.
OpenID Connect foydalanuvchi kimligini standart tokenlar, claimlar va identity providerlar orqali tekshirish uchun ishlatiladi.
Bog‘liq tushunchalar
OAuth, Authentication, Authorization, JWT, ID token, Access token, Refresh token, Scope, SSO, Identity provider, API, Security