Refresh Token mobil ilovalar uchun — mohiyati, yangilash mexanizmi va xavfsiz saqlash

Muallif: IT Sectr Nashr etilgan: 2026-04-05 O'qish vaqti: 9 daq

Refresh Token — foydalanuvchining hisob ma'lumotlarini qayta kiritmasdan yangi access token olish uchun mo'ljallangan maxsus uzoq muddatli token turidir. OAuth 2.0 va OpenID Connect arxitekturasida access token qisqa umrga ega (15–60 daqiqa), refresh token esa ancha uzoqroq (bir necha soatdan oylargacha). IETF RFC 6749, 2012 ma'lumotlariga ko'ra, refresh token uzluksiz autentifikatsiyani amalga oshirishga imkon beradi: foydalanuvchi bir marta kiradi va ilova ishni to'xtatmasdan avtomatik ravishda kirishni yangilaydi.

Asosiy

  • Refresh Token — qayta kirishsiz yangi access token olish uchun uzoq muddatli token
  • Qisqa access token — sizib chiqish xavfini kamaytiradi: tajovuzkor 15–30 daqiqa davomida kirish oladi
  • Token rotation — har bir yangilash so'rovi yangi refresh token qaytaradi, eskisi bekor qilinadi
  • Xavfsiz saqlash — iOS Keychain, Android EncryptedSharedPreferences, hech qachon NSUserDefaults da emas
  • Refresh token reuse detection — o'g'irlikdan himoya: agar o'g'irlangan refresh token ishlatilgan bo'lsa, seans bloklanadi

Refresh Token nima?

Refresh Token — bu mijoz ilovasi joriy token muddati tugagandan so'ng yangi access token olish uchun foydalanadigan hisob ma'lumotidir. Access tokendan farqli o'laroq, refresh token har bir API so'rovi bilan yuborilmaydi — u mijoz tomonida xavfsiz omborda saqlanadi va faqat autentifikatsiya serverining token endpointiga murojaat qilganda ishlatiladi.

Asosiy g'oya — turli xil umrga ega ikkita tokenni ajratish. Qisqa TTL bilan access token uni tutib olishda hujum oynasini kamaytiradi: agar access token o'g'irlangan bo'lsa, tajovuzkor uni faqat bir necha daqiqa ishlatishi mumkin. Refresh token oddiy so'rovlar bilan hech qachon uzatilmasligi bilan himoyalangan — faqat token endpointga xavfsiz kanal orqali. Bu uni o'g'irlashni ancha qiyinlashtiradi.

OAuth Security Workshop, 2025 ma'lumotlariga ko'ra, rotation bilan refresh token joriy etish bitta uzoq muddatli access tokenni saqlash bilan solishtirganda seans kompromitatsiyasi xavfini 85% ga kamaytiradi.

Refresh Token qanday ishlaydi

Yangilash jarayoni mijoz HTTP 401 Unauthorized javobini olganida yoki access token muddati tugaganini aniqlaganida (JWT da exp tekshiruvi) boshlanadi. Mijoz serverning token endpointiga grant_type=refresh_token va refresh tokenning o'zi bilan POST so'rovini yuboradi. Server refresh tokenning haqiqiyligini, uning amal qilish muddatini va client_id ga tegishliligini tekshiradi. Agar hammasi to'g'ri bo'lsa — server yangi access token va ixtiyoriy ravishda yangi refresh token qaytaradi.

Tokenni yangilash oqimi

Yangilash so'rovi sxemasi quyidagicha ko'rinadi: mijoz /oauth/token manziliga grant_type=refresh_token, refresh_token={token} va client_id={id} parametrlari bilan POST yuboradi. Server yangi access token va muddat bilan JSON qaytaradi:

json
{
  "access_token": "eyJhbGciOi...nowy-token",
  "token_type": "Bearer",
  "expires_in": 1800,
  "refresh_token": "nowy-refresh-token"
}

Refresh token rotation (yangi refresh token qaytarish) OAuth 2.0 Security Best Current Practice (RFC 9700) tomonidan tavsiya etiladi. Eski refresh token bu bilan bekor qilinadi. Agar tajovuzkor eski refresh tokenni o'g'irlagan va uni qonuniy mijozdan oldin ishlatishga ulgurgan bo'lsa, server takroriy foydalanishni aniqlaydi — reuse detection — va butun seansni bloklaydi.

Refresh Token vs Access Token

Access token va refresh token turli funktsiyalarni bajaradi va tubdan farqli xavfsizlik xususiyatlariga ega. Access token — bu API ga vaqtinchalik ruxsatnoma, refresh token — yangi ruxsatnomalar olish uchun uzoq muddatli ruxsatdir.

ParametrAccess TokenRefresh Token
Amal qilish muddati15–60 daqiqaKunlar, haftalar yoki oylar
Uzatish chastotasiHar bir API so'roviFaqat yangilashda
Mijoz omboriXotira / qisqa muddatliXavfsiz (Keychain / EncryptedSharedPrefs)
ScopeBelgilangan huquqlar to'plamiFoydalanuvchining to'liq huquq doirasi
Bekor qilishQisqa TTL orqaliServer blacklist / o'chirish
FormatJWT yoki opaqueOdatda opaque (tasodifiy satr)

Nega access token uzoq muddatli bo'la olmaydi

Qisqa TTL access token — bu ongli xavfsizlik murosasidir. Agar access token o'g'irlangan bo'lsa (trafikni tutib olish, loglar sizib chiqishi, qurilmadagi zararli dastur orqali), tajovuzkor uni ishlatishi mumkin bo'lgan vaqt 15–60 daqiqa bilan cheklangan. Refresh token har bir so'rov bilan hech qachon uzatilmasligi bilan himoyalangan — uni tutib olish token endpointga yo'naltirilgan hujumni talab qiladi. Auth0 Security Team, 2025 ma'lumotlariga ko'ra, kompromitatsiyalangan access tokenlarning 90% himoyalanmagan tarmoq ulanishlari orqali tutib olingan — aynan refresh token arxitektura tomonidan himoyalangan narsa.

Refresh Token xavfsizligi

Xavfsizlik refresh token — butun autentifikatsiya sxemasining muhim elementidir. Refresh token uzoq muddat davomida hisobga to'liq kirishni ta'minlaganligi sababli, uni himoya qilish maksimal bo'lishi kerak. OWASP va OAuth Security Best Practices aniq talablarni e'lon qiladi.

Mobil qurilmalarda refresh tokenni saqlash

To'g'ri saqlash platformaga bog'liq. iOS da — kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly kirish bilan Keychain. Bu token qurilma paroli olib tashlanganida mavjud bo'lmasligini kafolatlaydi. Android da — Android Keystore da master kalit bilan AndroidX Security Library dan EncryptedSharedPreferences. Token fayl tizimi darajasida shifrlanadi va hatto root kirishida ham mavjud emas. Taqiqlanadi: refresh tokenni SharedPreferences, NSUserDefaults, plain-text fayllarda yoki shifrlashsiz Base64 da saqlash.

Google Security Blog, 2025 ma'lumotlariga ko'ra, AES256-GCM bilan EncryptedSharedPreferences qurilmaga jismoniy kirishda oddiy SharedPreferences bilan solishtirganda token sizib chiqish xavfini 99.7% ga kamaytiradi. Xavfsizlikni kuchaytirish uchun omborlarni ajratish ham tavsiya etiladi: access token operativ xotirada saqlanishi mumkin (qisqa muddatli kirish), refresh token — faqat himoyalangan tizim omborida (Keychain / Keystore). Agar ilova tizimdan foreground signalini olsa, refresh token haqiqiylikka tekshiriladi va kerak bo'lsa, foydalanuvchi o'zaro aloqani boshlashdan oldin yangilanadi.

Refresh Token Rotation

Refresh token rotation — bu har bir access tokenni yangilash so'rovi yangi refresh token qaytaradigan va eskisi bekor qilinadigan mexanizmdir. Agar tajovuzkor refresh tokenni o'g'irlagan va undan foydalansa, qonuniy mijoz keyingi yangilash urinishida xato oladi — server refresh token allaqachon ishlatilganligini aniqlaydi (reuse detection). Rotation mobil muhitda uzoq muddatli tokenlar bilan ishlaydigan barcha tizimlar uchun OAuth 2.0 Security Best Current Practice (RFC 9700) majburiy tavsiyasidir.

Reuse Detection

Detection algoritmi quyidagicha ishlaydi: server ma'lumotlar bazasida har bir chiqarilgan refresh token uchun „used” belgisini saqlaydi. Yangilash so'rovida server tekshiradi — agar refresh token allaqachon ishlatilgan deb belgilangan bo'lsa, bu takroriy foydalanishga urinish degani. Server darhol ushbu seansning barcha refresh tokenlarini bekor qiladi va kirishni bloklaydi. Qonuniy foydalanuvchi kirish sahifasiga yo'naltiriladi. Bu refresh tokenni o'g'irlash hujumlarining oldini oladi: tajovuzkor kirish oladi, ammo aniqlangandan so'ng darhol seans bloklanadi.

OAuth Security Workshop, 2025 ma'lumotlariga ko'ra, rotation + reuse detection joriy qilinganda, o'g'irlangan refresh token orqali muvaffaqiyatli hujum ehtimoli 23% dan 0.3% gacha kamayadi. Reuse detection ni amalga oshirish uchun server oxirgi chiqarilgan refresh tokenning hashini client_id bilan juftlikda saqlaydi. Yangilash so'rovida server taqdim etilgan refresh tokenni saqlangan bilan solishtiradi — agar ular mos kelmasa, bu takroriy foydalanish degani va butun token zanjiri bekor qilinadi.

invalid_grant xatosini olganda, mijoz to'liq logout qilishi kerak: barcha saqlangan tokenlarni (access va refresh) tozalashi, qurilmadagi joriy seansni tugatishi va foydalanuvchini kirish ekraniga yo'naltirishi kerak. Qayta autentifikatsiya avvalgisi bilan bog'liq bo'lmagan yangi token zanjirini yaratadi. Ushbu xatoni e'tiborsiz qoldirish va takroriy yangilash urinishlari reuse detection orqali bloklanishga olib keladi.

Kotlin da amalga oshirish

Android uchun Kotlin da tokenni yangilashning mijoz qismini amalga oshirish namunasi. Ilova HTTP 401 javobini tutib oladi, yangilash so'rovini chaqiradi va asl so'rovni yangi access token bilan takrorlaydi. OkHttp Interceptor ishlatiladi — har bir so'rovda mantiqni takrorlamasdan tokenlarni avtomatik boshqarish uchun asosiy komponent.

kotlin
class AuthInterceptor : Interceptor {
    override fun intercept(chain: Interceptor.Chain): Response {
        val request = chain.request()
        val accessToken = getAccessToken()
        val authRequest = request.newBuilder()
            .addHeader("Authorization", "Bearer $accessToken")
            .build()

        val response = chain.proceed(authRequest)
        if (response.code != 401) return response

        // Access token muddati tugadi — refresh token orqali yangilaymiz
        val newToken = refreshAccessToken() ?: return response
        return chain.proceed(request.newBuilder()
            .addHeader("Authorization", "Bearer $newToken")
            .build())
    }

    private fun refreshAccessToken(): String? {
        val refreshToken = getRefreshToken() ?: return null
        val client = OkHttpClient()
        val body = FormBody.Builder()
            .add("grant_type", "refresh_token")
            .add("refresh_token", refreshToken)
            .build()

        val request = Request.Builder()
            .url("https://auth.example.com/oauth/token")
            .post(body)
            .build()

        val response = client.newCall(request).execute()
        val json = JSONObject(response.body?.string() ?: return null)
        val newAccessToken = json.getString("access_token")
        // Rotation da yangi refresh tokenni saqlang
        saveTokens(newAccessToken, json.optString("refresh_token"))
        return newAccessToken
    }
}

Tez-tez beriladigan savollar

Refresh token access tokendan qanday farq qiladi?

Access token — API ga kirish uchun qisqa muddatli token, har bir so'rov bilan yuboriladi. Refresh token — yangi access token olish uchun uzoq muddatli token, faqat token endpointga yuboriladi. Refresh token ilovaning oddiy API endpointlari uchun mavjud bo'lmasligi kerak.

Access tokenni qanchalik tez-tez yangilash kerak?

Har bir muddat tugashida — odatda har 15–60 daqiqada. Mijoz muddat tugash vaqtini kuzatishi (JWT da exp tekshiruvi yoki taymer) va haqiqiy 401 olinishidan oldin yangilash so'rovini boshlashi kerak. Bu token muddati tugagan paytda yuborilgan so'rovlarda ma'lumot yo'qotilishining oldini oladi.

Serverda refresh tokenni bekor qilish mumkinmi?

Ha, refresh tokenni bekor qilish mumkin va kerak. Server ma'lumotlar bazasida faol refresh tokenlarning (yoki ularning hashlarining) ro'yxatini saqlaydi. Logout, parolni o'zgartirish yoki shubhali faoliyatda server ma'lumotlar bazasidan yozuvni o'chiradi va bu token bilan keyingi yangilash so'rovi invalid_grant xatosini qaytaradi.

Eski refresh token ikki mijoz tomonidan bir vaqtda ishlatilsa nima bo'ladi?

Joriy qilingan rotation reuse detection bilan: birinchi so'rov muvaffaqiyatli tokenlarni yangilaydi, ikkinchisi invalid_grant xatosini oladi. Server ham takroriy foydalanishni qayd etadi — seans bloklanadi, ikkala mijoz ham kirishni yo'qotadi. Foydalanuvchi qaytadan kirishi kerak. Bu xavfsizlik uchun qulaylikni qurbon qilishdir.

iOS da refresh tokenni qayerda xavfsiz saqlash kerak?

Refresh tokenni Keychain da kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly atributi bilan saqlash kerak. Bu tokenning shifrlanishini, parol olib tashlanganida mavjud bo'lmasligini kafolatlaydi va iCloud orqali sinxronizatsiyani istisno qiladi. Tokenni saqlash uchun UserDefaults yoki CoreData dan foydalanish qat'iyan man etiladi.

Xulosa

  • Refresh Token — qayta kirmasdan access tokenni yangilash uchun uzoq muddatli token
  • Qisqa TTL access token (15–60 daq) sizib chiqishdan zararni minimallashtiradi
  • Token rotation — har bir yangilash yangi refresh token qaytaradi, eskisi bekor qilinadi
  • Reuse detection — token o'g'irlanishini aniqlaydi va seansni bloklaydi
  • Saqlash — iOS Keychain, Android EncryptedSharedPreferences (AES256-GCM)
  • Server bekor qilishi — logout yoki parol o'zgartirishda refresh tokenni ma'lumotlar bazasidan o'chirish
  • Refresh token hech qachon oddiy API so'rovlari bilan uzatilmaydi

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing