Bosh sahifa Wiki OpenID Connect

OpenID Connect

OpenID ConnectOAuth 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:

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:

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.0authorization protokoli;
  • OpenID Connectauthentication 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:

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:

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:

  • user ID;
  • email;
  • email tasdiqlangan holati;
  • ism;
  • familiya;
  • avatar URL;
  • til;
  • vaqt zonasi.

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 sub o‘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

Nonceauthentication 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

StateOAuth 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:

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:

Implicit Flow tarixiy jihatdan muhim, lekin yangi tizimlarda kamroq uchraydi.

Hybrid Flow

Hybrid Flowauthorization code va tokenlarni birgalikda qaytarishi mumkin bo‘lgan OpenID Connect oqimi.

Hybrid Flow quyidagi holatlarda ishlatilishi mumkin:

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:

Bu hujjat provider bilan avtomatik integratsiya qilishda ishlatiladi.

JWKS

JWKSJSON Web Key Set. Bu public keylar to‘plami bo‘lib, ID token yoki JWT imzosini tekshirish uchun ishlatiladi.

JWKS orqali client:

JWKS URI odatda discovery document ichida ko‘rsatiladi.

Key rotation

Key rotationidentity 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:

  • Google;
  • Microsoft;
  • Apple;
  • Auth0;
  • Okta;
  • Keycloak;
  • Azure AD;
  • GitHub Enterprise.

Identity provider foydalanuvchi akkauntlarini markazlashtirilgan holda boshqaradi.

Relying party

Relying partyidentity 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:

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 logoutbrowser 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 logoutidentity 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:

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:

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