Bosh sahifa Wiki Refresh token

Refresh token

Refresh token — clientga foydalanuvchini qayta login qildirmasdan yangi access token olish imkonini beruvchi uzoqroq muddatli credential. U OAuth 2.0 authorization server tomonidan chiqariladi va faqat token endpointga yuboriladi; odatiy API so‘rovida resource serverga berilmaydi. Refresh token mavjudligi clientga doimiy cheksiz ruxsat bermaydi: server uning muddati, clientga bog‘liqligi, scope chegarasi va bekor qilingan holatini tekshiradi.

Yangilash oqimi

Access token muddati tugaganda client token endpointga grant_type=refresh_token parametri bilan murojaat qiladi. Confidential client bo‘lsa, u o‘zini client secret yoki boshqa usul bilan ham autentifikatsiya qiladi. Server refresh tokenni tekshiradi va yangi access token qaytaradi. Yangi tokenning scope’i dastlab berilgan vakolatdan keng bo‘la olmaydi; ayrim serverlar clientga torroq scope so‘rashga ruxsat beradi.

POST /oauth/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&refresh_token=R1x...

Refresh token muddati access tokendan uzun bo‘lgani sababli uning sizishi kattaroq xavf tug‘diradi. Server uni parolga o‘xshash credential sifatida ko‘radi. Brauzerga asoslangan public clientlarda token saqlash va XSS tahdidi sabab authorization server siyosati alohida cheklovlar qo‘yishi mumkin. Mobil dasturda operatsion tizimning keychain yoki keystore mexanizmi ishlatiladi.

Rotation mexanizmi

Refresh token rotation har yangilashda avvalgi tokenni bekor qilib, yangisini chiqaradi. Client javobdagi yangi qiymatni atomik tarzda saqlashi kerak. Eski token keyin yana ishlatilsa, bu nusxa o‘g‘irlanganini ko‘rsatishi mumkin. Server token oilasini aniqlab, faqat takror ishlatilgan qiymatni emas, undan hosil bo‘lgan keyingi tokenlarni ham bekor qiladi. Bu replay hujumining ta’sirini kamaytiradi.

Tarmoq uzilishi murakkab holat yaratadi: server yangi tokenni chiqargan, lekin client javobni olmagan bo‘lishi mumkin. Rotation implementatsiyasi qisqa grace period, idempotent almashuv yoki token oilasi holati orqali qonuniy clientni tasodifan chiqarib yubormaslikni ko‘zda tutadi. Juda uzun grace period esa o‘g‘irlangan eski tokenning qiymatini oshiradi.

Amal muddati va siyosat

Absolute lifetime token oilasining maksimal umrini belgilaydi. Inactivity timeout esa token ma’lum muddat ishlatilmasa yangilash imkonini tugatadi. Parol almashtirilishi, hisob bloklanishi, foydalanuvchining roziligini qaytarib olishi yoki administrator qarori refresh tokenlarni bekor qilishi mumkin. Logoutning barcha qurilmalardan chiqish varianti foydalanuvchiga tegishli token oilalarini serverda yaroqsiz qiladi.

Authorization server tokenni ochiq ko‘rinishda bazada saqlashi shart emas. Yetarlicha tasodifiy opaque tokenning xeshi saqlanib, kelgan qiymat xeshlanib solishtirilishi mumkin. Yozuvda client identifikatori, subyekt, scope, chiqarilgan vaqt, oxirgi foydalanish va token oilasi qayd etiladi. Jurnalga tokenning to‘liq qiymati emas, xavfsiz korrelatsiya identifikatori yoziladi.

Access tokendan farqi

Access token ko‘plab API so‘rovlarida ishlatiladi va qisqa yashaydi; refresh token esa kamroq, faqat authorization server bilan almashuvda qo‘llanadi. Resource server refresh tokenni qabul qilmasligi kerak. Access token sizganda mavjud vakolat uning muddati tugaguncha ishlatiladi. Refresh token sizganda esa yangi access tokenlar qayta-qayta olinishi mumkin, shu bois rotation, sender binding va tezkor bekor qilish alohida ahamiyatga ega.

Native clientda bir nechta qurilma uchun alohida token oilasi yaratilsa, foydalanuvchi faqat yo‘qolgan telefon sessiyasini bekor qila oladi. Barcha qurilmaga bitta refresh token nusxalash qurilmani aniqlash va selektiv revocation imkonini yo‘qotadi. Audit oilani qurilma nomi va chiqarilgan vaqt bilan ko‘rsatishi mumkin.

Bog‘liq tushunchalar

Access token, OAuth 2.0, Token rotation, Authorization server, Scope, Revocation, PKCE