Kimlik Dogrulama Neden Kritik?
Mobil uygulamada auth sistemi sadece "giris yap" butonu degildir. Kullanicinin verilerini korumak, session'lari yonetmek ve ucuncu parti servislerle guvenli iletisim kurmak icin saglam bir auth mimarisine ihtiyacin var. Yanlis bir token storage ya da eksik bir PKCE implementasyonu ciddi guvenlik aciklarina yol acar.
OAuth 2.0 + PKCE Flow
Mobil uygulamalarda klasik OAuth 2.0 Authorization Code flow'u tek basina yeterli degil. Mobil cihazlarda client secret guvenli saklanamayacagi icin PKCE (Proof Key for Code Exchange) kullanmak zorunlu.
PKCE flow su sekilde calisir:
- Uygulama rastgele bir code_verifier olusturur
- Bu degerden SHA256 ile code_challenge turetilir
- Authorization isteginde code_challenge gonderilir
- Token exchange sirasinda code_verifier gonderilir
- Sunucu ikisini karsilastirarak dogrulama yapar
Bu sayede authorization code ele gecirilse bile, code_verifier olmadan token alinamaz.
Google Sign-In vs Apple Sign-In
Google Sign-In
- Android'de Google Play Services uzerinden calisir (tek tikla giris)
- iOS'ta Google SDK gerekir
- ID token doner, backend'de dogrulanir
- Kullanici email, ad ve profil fotosu alinabilir
Apple Sign-In
- iOS 13+ cihazlarda desteklenir
- Apple zorunlulugu: Ucuncu parti giris (Google, Facebook vb.) sunuyorsan Apple Sign-In da sunmak zorundasin. Bu kural 2026'da hala gecerli ve ihlali app rejection sebebi.
- Kullanici email'ini gizleyebilir ("Hide My Email" ile relay adresi verir)
- Ilk giris disinda Apple kullanici bilgisi gondermez, bu yuzden ilk giristeki verileri mutlaka kaydet
Entegrasyon Farklari
| Ozellik | Google Sign-In | Apple Sign-In |
|---|---|---|
| Zorunluluk | Opsiyonel | Diger social login varsa zorunlu |
| Email gizleme | Yok | Var (relay email) |
| Veri tekrari | Her giriste gelir | Sadece ilk giriste gelir |
| Android destegi | Native | Web-based (sınırlı) |
| Token formati | ID Token (JWT) | Identity Token (JWT) |
JWT Access ve Refresh Token Yonetimi
Mobil uygulamada token yonetimi web'den farklidir cunku tarayici cookie'si yok.
- Access Token: Kisa omurlu (15-30 dk), her API isteginde gonderilir
- Refresh Token: Uzun omurlu (7-30 gun), yeni access token almak icin kullanilir
- Access token suresi doldugunda refresh token ile sessizce yenilenir
- Refresh token calinan bir cihazda tehlikelidir, bu yuzden token rotation uygulanmali
Token rotation: Her refresh isleminde eski refresh token gecersiz olur, yenisi verilir. Boylece calinti token bir kez kullanilabilir.
Token Saklama
Token'lari duz metin olarak AsyncStorage veya SharedPreferences'a kaydetmek büyük bir hatadir.
| Platform | Guvenli Depolama | Aciklama |
|---|---|---|
| iOS | Keychain Services | Donanim sifreleme, uygulama sandbox'i |
| Android | Android Keystore + EncryptedSharedPreferences | Donanim destekli sifreleme |
| React Native | expo-secure-store | Keychain (iOS) ve Keystore (Android) sarmalar |
expo-secure-store ile kullanim cok basittir:
- SecureStore.setItemAsync('accessToken', token) ile kaydet
- SecureStore.getItemAsync('accessToken') ile oku
- SecureStore.deleteItemAsync('accessToken') ile sil
Biyometrik Kimlik Dogrulama
iOS (Face ID / Touch ID)
- LocalAuthentication framework'u ile entegre edilir
- Info.plist'e NSFaceIDUsageDescription eklenmeli
- Cihazda biyometri yoksa PIN/parola fallback'i otomatik sunulur
Android (BiometricPrompt)
- AndroidX Biometric kutuphanesi kullanilir
- BIOMETRIC_STRONG (parmak izi, yuz) ve BIOMETRIC_WEAK ayrimlari var
- Device Credential fallback eklenebilir (PIN, desen, sifre)
Expo ve React Native
- expo-local-authentication paketi her iki platformu da sarmalar
- authenticateAsync() tek bir cagriyla biyometrik dogrulama baslatir
- isEnrolledAsync() ile cihazda biyometri kayitli mi kontrol edilir
Session Yonetimi Best Practices
- Arka plandan donuste token gecerliligini kontrol et
- Uzun sure kullanilmayan cihazda oturumu sonlandir (idle timeout)
- Cihaz degisikliginde yeniden dogrulama iste
- Kullaniciya aktif oturumlari gorme ve sonlandirma imkani sun
- Hassas islemlerde (odeme, sifre degisikligi) tekrar biyometrik dogrulama iste
2026 Best Practices
- PKCE her OAuth flow'da standart, implicit grant kullanma
- Passkey destegi (FIDO2/WebAuthn) yayginlasiyor, desteklemeyi planla
- Token'lari her zaman platform'un guvenli deposunda sakla
- Refresh token rotation mutlaka aktif olsun
- Apple Sign-In zorunlulugu devam ediyor, goz ardi etme
- Multi-factor authentication (MFA) opsiyonel olarak sun
Kullaniciya mumkun olan en az surtucu giris deneyimini sun ama guvenlikten odun verme. Biyometrik giris bunu dengelemek icin en iyi aractir.