Refresh Token mobil tətbiqlər üçün — mahiyyəti, yeniləmə mexanizmi və təhlükəsiz saxlama

Müəllif: IT Sectr Dərc olunub: 2026-04-05 Oxuma vaxtı: 9 dəq

Refresh Token — istifadəçinin daxil etdiyi məlumatları təkrar daxil etmədən yeni access token əldə etmək üçün nəzərdə tutulmuş xüsusi bir uzunömürlü token növüdür. OAuth 2.0 və OpenID Connect arxitekturasında access token qısa ömürlüdür (15–60 dəqiqə), refresh token isə çox daha uzun müddət ömürlüdür (bir neçə saatdan aylara qədər). IETF RFC 6749, 2012 məlumatlarına görə, refresh token fasiləsiz autentifikasiyanı həyata keçirməyıməə imkan verir: istifadəçi bir dəfə daxil olur və tətbiq işi dayandırmadan avtomatik olaraq girişi yeniləyir.

Başlıca

  • Refresh Token — re-login olmadan yeni access token əldə etmək üçün uzunömürlü token
  • Qısa access token — sızıntı zamanı riski azaldır: təcavüzkar 15–30 dəqiqə ərzində giriş əldə edir
  • Token rotation — hər yeniləmə sorğusu yeni refresh token qaytarır, köhnəsi etibarsız edilir
  • Təhlükəsiz saxlama — iOS Keychain, Android EncryptedSharedPreferences, heç vaxt NSUserDefaults-da deyil
  • Refresh token reuse detection — oğurluqdan qorunma: oğurlandıqda refresh token istifadə edilibsə, sessiya bloklanır

Refresh Token nədir?

Refresh Token — müştəri tətbiqinin cari access tokenin müddəti bitdikdən sonra yenisini əldə etmək üçün istifadə etdiyi etimadnamədir. Access token-dən fərqli olaraq, refresh token hər API sorğusunda göndərilmir — o, müştəri tərəfdə təhlükəsiz anbarda saxlanılır və yalnız autentifikasiya serverinin token endpoint-ə müraciət edərkən istifadə olunur.

Əsas ideya müxtəlif ömürlü iki tokenin ayrılmasıdır. Qısa TTL ilə access token onun kəsilməsi zamanı hücum pəncərəsini azaldır: əgər access token oğurlandıqda, təcavüzkar onu yalnız bir neçə dəqiqə istifadə edə bilər. Refresh token adi sorğularda heç vaxt göndərilməməklə qorunur — yalnız token endpoint-ə təhlükəsiz kanal vasitəsilə. Bu, onun oğurlandılmasını xeyli çətinləşdirir.

OAuth Security Workshop, 2025 məlumatlarına görə, rotation ilə refresh token tətbiqi bir uzunömürlü access token saxlamaqla müqayisədə sessiyanın kompromat olma riskini 85% azaldır.

Refresh Token necə işləyir

Yeniləmə prosesi müştəri HTTP 401 Unauthorized cavabı aldıqda və ya access tokenin müddətinin bitdiyini aşkarladıqda (JWT-də exp yoxlanılması) başlayır. Müştəri sorğunun gövdəsində grant_type=refresh_token və refresh token özü ilə serverin token endpoint-ə POST sorğusu göndərir. Server refresh tokenin etibarlılığını, onun istifadə müddətini və client_id-ə aidliyini yoxlayır. Hər şey düzgündürsə — server yeni access token və isteğə bağlı olaraq yeni refresh token qaytarır.

Token yeniləmə axını

Yeniləmə sorğu sxemi belə görünür: müştəri /oauth/token ünvanına grant_type=refresh_token, refresh_token={token}client_id={id} parametrləri ilə POST göndərir. Server yeni access token və müddət ilə JSON qaytarır:

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

Refresh token rotation (yeni refresh tokenin qaytarılması) OAuth 2.0 Security Best Current Practice (RFC 9700) tərəfindən tövsiyə olunur. Köhnə refresh token bununla etibarsız edilir. Əgər təcavüzkar köhnə refresh tokeni oğurlamış və onu qanuni müştəridən əvvəl istifadə etməyə müvəffəq olmuşsa, server təkrari istifadəni aşkar edəcək — reuse detection — və bütün sessiyanı bloklayacaq.

Refresh Token vs Access Token

Access token və refresh token müxtəlif funksiyaları yerinə yetirir və prinsipial olaraq fərqli təhlükəsizlik xüsusiyyətlərinə malikdir. Access token API-ə müvəqqəti keçiddir, refresh token isə yeni keçidlər əldə etmək üçün uzunmüddətli icazədir.

ParametrAccess TokenRefresh Token
Ömür müddəti15–60 dəqiqəGünlər, həftələr və ya aylar
Göndərilmə tezliyiHər API sorğusuYalnız yeniləmə zamanı
Müştəri anbarıYaddaş / qısamüddətliTəhlükəsiz (Keychain / EncryptedSharedPrefs)
ScopeMüəyyən edilmiş hüquq dəstiİstifadəçinin tam hüquq dairəsi
LəğvQısa TTL vasitəsiləServer blacklist / silinmə
FormatJWT və ya opaqueAdətən opaque (təsadüfi sətir)

Niyə access token uzunömürlü ola bilməz

Qısa TTL access token — bu şürurlı təhlükəsizlik kompromisidir. Əgər access token oğurlandıqda (trafikin kəsilməsi, log sızıntısı, cihazdakı zərərli proqram vasitəsilə), təcavüzkarın onu istifadə edə biləcəyi vaxt 15–60 dəqiqə ilə məhdudlaşır. Refresh token hər sorğuda heç vaxt göndərilməməklə qorunur — onun kəsilməsi token endpoint-ə yönəldilmiş hücum tələb edir. Auth0 Security Team, 2025 məlumatlarına görə, kompromat olmuş access tokenlərin 90%-i qorunmayan şəbəkə əlaqələri vasitəsilə kəsilmişdir — yəni refresh tokenin arxitekturanın özü ilə qorunduğu şey.

Refresh Token təhlükəsizliyi

Təhlükəsizlik refresh token — bütün autentifikasiya sxeminin kritik elementidir. Refresh token uzun müddət ərzində hesaba tam giriş təmin etdiyindən, onun qorunması maksimum olmalıdır. OWASP və OAuth Security Best Practices konkret tələblər dərc edir.

Mobil cihazlarda refresh token saxlama

Düzgün saxlama platformadan asılıdır. iOS-da — kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly girişi ilə Keychain. Bu, tokenin cihaz şifrəsi çıxarıldıqda əlçatmaz olmasını təmin edir. Android-də — Android Keystore-da master açarla EncryptedSharedPreferences AndroidX Security Library-dən. Token fayl sistemi səviyyəsində şifrələnir və hətta root girişində belə əlçatmazdır. Qadağandır: refresh tokeni SharedPreferences, NSUserDefaults, plain-text fayllarda və ya şifrələmədən Base64-də saxlamaq.

Google Security Blog, 2025 məlumatlarına görə, AES256-GCM ilə EncryptedSharedPreferences cihaza fiziki giriş zamanı adi SharedPreferences ilə müqayisədə token sızıntısı riskini 99.7% azaldır. Təhlükəsizliyi gücləndirmək üçün anbarları ayırmaq da tövsiyə olunur: access token operativ yaddaşda saxlanıla bilər (qısamüddətli giriş), refresh token — yalnız qorunan sistem anbarında (Keychain / Keystore). Əgər tətbiq sistemdən foreground siqnalı alırsa, refresh token etibarlılıq üçün yoxlanılır və zəruri olduqda istifadəçi qarşılıqlı əlaqəyə başlamazdan əvvəl yenilənir.

Refresh Token Rotation

Refresh token rotation — hər access token yeniləmə sorğusunun yeni refresh token qaytardığı və köhnəsinin ləğv edildiyi mexanizmdir. Əgər təcavüzkar refresh tokeni oğurlamış və ondan istifadə edərsə, qanuni müştəri növbəti yeniləmə cəhdində xəta alacaq — server refresh tokenin artıq istifadə edildiyini aşkar edəcək (reuse detection). Rotation OAuth 2.0 Security Best Current Practice (RFC 9700) tərəfindən mobil mühitdə uzunömürlü tokenlərlə işləyən bütün sistemlər üçün məcburi tövsiyədir.

Reuse Detection

Detection alqoritmi belə işləyir: server verilənlər bazasında hər verilmiş refresh token üçün „used” işarəsi saxlayır. Yeniləmə sorğusunda server yoxlayır — əgər refresh token artıq istifadə edilmiş kimi qeyd olunubsa, bu təkrari istifadə cəhdi deməkdir. Server dərhal bu sessiyanın bütün refresh tokenlərini etibarsız edir və girişi bloklayır. Qanuni istifadəçi giriş səhifəsinə yönləndirilir. Bu, refresh token oğurlandılması hücumlarının qarşısını alır: təcavüzkar giriş əldə edir, lakin aşkarlandıqdan dərhal sonra sessiya bloklanır.

OAuth Security Workshop, 2025 məlumatlarına görə, rotation + reuse detection tətbiqi ilə oğurlandıq refresh token vasitəsilə uğurlu hücum ehtimalı 23%-dən 0.3%-ə düşür. Reuse detection tətbiqi üçün server son verilmiş refresh tokenin hashini client_id ilə cütdə saxlayır. Yeniləmə sorğusunda server təqdim edilmiş refresh tokeni saxlanılan ilə müqayisə edir — əgər uyğum gəlməzlərsə, bu təkrari istifadə deməkdir və bütün token zənciri ləğv edilir.

invalid_grant xətasını aldıqda müştəri tam logout həyata keçirməlidir: bütün saxlanılan tokenləri (access və refresh) təmizləməli, cihazda cari sessiyanı bitirməli və istifadəçini giriş ekranına yönləndirməlidir. Təkrar autentifikasiya əvvəlki ilə əlaqəsi olmayan yeni token zənciri yaradır. Bu xətanı görməməzlikdən gəlmək və təkrar refresh cəhdləri reuse detection səbəbindən bloklanmaya səbəb olacaq.

Kotlin-də tətbiqi

Android üçün Kotlin-də token yeniləməsinin müştəri hissəsinin tətbiq nümunəsi. Tətbiq HTTP 401 cavabını kəsir, refresh sorğusu göndərir və orijinal sorğunu yeni access token ilə təkrarlayır. OkHttp Interceptor istifadə olunur — hər sorğuda mantiqanı təkrarlamadan tokenləri avtomatik idarə etmək üçün əsas 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 tokenin müddəti bitdi — refresh token vasitəsilə yeniləyirik
        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 zamanı yeni refresh token saxla
        saveTokens(newAccessToken, json.optString("refresh_token"))
        return newAccessToken
    }
}

Tez-tez verilən suallar

Refresh token access token-dən nə ilə fərqlənir?

Access token — API-ə giriş üçün qısamüddətli token, hər sorğu ilə göndərilir. Refresh token — yeni access token əldə etmək üçün uzunömürlü token, yalnız token endpoint-ə göndərilir. Refresh token tətbiqin adəti API endpointləri üçün əlçatan olmamalıdır.

Access token nə qədər tez-tez yenilənməlidir?

Hər müddət bitdikdə — adətən hər 15–60 dəqiqə. Müştəri müddətin bitmə vaxtını izləməli (JWT-də exp yoxlanılması və ya taymer) və faktiki 401 alınmazdan əvvəl refresh sorğusunu başlatmalıdır. Bu, tokenin müddətinin bitdiyi anda göndərilmiş sorğularda məlumat itkisinin qarşısını alır.

Serverdə refresh tokeni ləğv etmək olarmı?

Bəli, refresh tokeni ləğv etmək olar və lazımdır. Server verilənlər bazasında aktiv refresh tokenlərin (və ya onların heşlərinin) siyahısını saxlayır. Logout, şifrə dəyişikliyi və ya şühbəli aktivlik zamanı server verilənlər bazasından qeydi silir və bu token ilə növbəti yeniləmə sorğusu invalid_grant xətası qaytaracaq.

Köhnə refresh token iki müştəri tərəfindən eyni vaxtda istifadə edildikdə nə baş verir?

Tətbiq edilmiş rotation reuse detection ilə: birinci sorğu tokenləri uğurla yeniləyir, ikincisi invalid_grant xətası alır. Server də təkrari istifadəni qeyd edir — sessiya bloklanır, hər iki müştəri girişi itirir. İstifadəçi yenidən daxil olmalıdır. Bu, təhlükəsizlik naminə rahatlıqdan qurban verməkdir.

iOS-da refresh tokeni harada təhlükəsiz saxlamaq olar?

Refresh tokeni Keychain-də kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly atributu ilə saxlamaq lazımdır. Bu, tokenin şifrələnməsini, şifrə çıxarıldıqda əlçatmazlığını təmin edir və iCloud vasitəsilə sinxronizasiyanı istisna edir. Token saxlamaq üçün UserDefaults və ya CoreData istifadəsi qəti qadağandır.

Nəticələr

  • Refresh Token — re-login olmadan access token yeniləmək üçün uzunömürlü token
  • Qısa TTL access token (15–60 dəq) sızıntıdan zərəri minimuma endirir
  • Token rotation — hər yeniləmə yeni refresh token qaytarır, köhnəsi etibarsız edilir
  • Reuse detection — token oğurlandılmasını aşkar edir və sessiyanı bloklayır
  • Saxlama — iOS Keychain, Android EncryptedSharedPreferences (AES256-GCM)
  • Server ləğvi — logout və ya şifrə dəyişikliyi zamanı refresh tokenin verilənlər bazasından silinməsi
  • Refresh token heç vaxt adi API sorğuları ilə göndərilmir

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun