Bloga Dön

Oyunlar için Granüler OAuth Onayı: Backend'inizde Kapsam Düzeyinde İzinler Uygulamak

Yayınlanma tarihi 21 Ağustos 2026
Oyunlar için Granüler OAuth Onayı: Backend'inizde Kapsam Düzeyinde İzinler Uygulamak Yapay zekâ yardımıyla oluşturuldu

Özet olarak

Granüler OAuth onayı ile oyun backend'inizde kapsam düzeyinde izinler uygulayın. Oyuncu güvenini artırın ve kısmi yetkilendirmeleri yönetin.

Her indie geliştirici, oyuncunun izin ekranında tereddüt ettiği anı bilir. Oyununuz arkadaş listesine, e-postasına, satın alma geçmişine erişim ister—ve oyuncu "Reddet"e tıklar. Bu tereddüt mantıksız değil; gizlilik ihlali gibi hissettiren ya hep ya hiç seçeneğine verilen rasyonel bir tepkidir. Bu sürtünme, dönüşüm oranlarınızı ve oyuncu güveninizi doğrudan etkiler.

Cloudflare'ın OAuth sistemine yaptığı son güncelleme güçlü bir çözüm sunuyor: görev tabanlı, granüler onay. Oyuncuları oyununuzun gerekebilecek her izni onaylamaya zorlamak yerine, artık belirli kapsamları isteğe bağlı olarak işaretleyebilirsiniz. Bu, oyuncuların yalnızca mevcut görev için rahat oldukları izinleri vermesini sağlar; bu da oyun kimlik doğrulama akışları için bir paradigma değişimidir.

Oyunlarda Ya Hep Ya Hiç İzinlerin Sorunu

Geleneksel OAuth onayı ikilidir. Oyununuz profile.read, friends.list ve inventory.write gibi kapsamlar istediğinde, oyuncu tek bir "Onayla" butonu görür. Üçüncü taraf bir araca inventory.write erişimi vermekten rahatsızsa, tek seçeneği tüm isteği reddetmektir.

Bu, oyun geliştiricileri için birkaç somut sorun yaratır:

  1. Yüksek Terk Oranları: Güvenlik bilincine sahip oyuncular, geniş erişim vermek yerine oyununuzdan ayrılır.
  2. Aşırı İzin Verme: Terk oranlarını önlemek için geliştiriciler genellikle gerçekte ihtiyaç duyduklarından daha az kapsam ister ve işlevselliği kısıtlar.
  3. Güven Erozyonu: Oyuncular, oyununuzun giriş akışını kontrol kaybıyla ilişkilendirmeyi öğrenir ve uzun vadeli elde tutmayı zedeler.

Temel sorun şu: temel istatistik takibi için bir yardımcı uygulamayı yetkilendiren bir oyuncu, aynı zamanda yüklerini değiştirme veya oyun içi para harcama yetkisi vermek zorunda kalmamalıdır.

Görev Tabanlı OAuth Onayı Nasıl Çalışır

Yeni model, geliştiricilerin bir OAuth istemcisini iki tür kapsamla yapılandırmasına olanak tanır: zorunlu ve isteğe bağlı. Bir oyuncu yetkilendirme akışı başlattığında, istenen tüm izinlerin listesini görür ancak isteğe bağlı olarak işaretlenenlerden herhangi birinin seçimini kaldırabilir.

Önemli teknik detay, bu değerlendirmenin istemcinin tam yapılandırılmış kapsam setine karşı değil, yetkilendirme isteği başına yapılmasıdır. Bu, farklı özelliklerin farklı izinler gerektirdiği oyunlar için çok önemlidir.

Şu kapsamlara sahip bir oyun backend'i düşünün:

  • player.profile.read (temel giriş için zorunlu)
  • player.inventory.read (isteğe bağlı, yardımcı uygulama için)
  • player.inventory.write (isteğe bağlı, yük yöneticisi için)
  • match.history.read (isteğe bağlı, istatistik takibi için)

Basit bir istatistik takip aracı kullanan bir oyuncu yalnızca player.profile.read ve match.history.read ister. Onay ekranı ikisini de gösterir, ancak match.history.read isteğe bağlı olduğundan, oyuncu seçimini kaldırabilir ve sınırlı bir token ile devam edebilir. inventory kapsamları, bu belirli akış için istenmediğinden görünmez bile.

Oyun Backend'inizde Granüler Onay Uygulamak

Pratik bir uygulamayı adım adım inceleyelim. Özel bir çözüm veya horizOn gibi bir hizmet olsun, kendi backend'inize uyarlayabileceğiniz genel bir OAuth 2.0 akışı kullanacağız.

Adım 1: OAuth İstemcinizi İsteğe Bağlı Kapsamlarla Yapılandırın

OAuth uygulamanızı yetkilendirme sunucunuza (Cloudflare veya kendi sunucunuz gibi) kaydederken, hangi kapsamların zorunlu, hangilerinin isteğe bağlı olduğunu tanımlarsınız. Kavramsal bir yapılandırma:

{
  "client_id": "your_game_client_id",
  "scopes": {
    "required": ["player.profile.read"],
    "optional": [
      "player.inventory.read",
      "player.inventory.write",
      "match.history.read",
      "match.history.write"
    ]
  },
  "redirect_uris": ["https://yourgame.com/callback"]
}

Bu, yetkilendirme sunucusuna şunu söyler: "Bu istemci izin istediğinde, player.profile.read istendiyse her zaman verilmelidir, ancak diğerleri kullanıcıya bağlıdır."

Adım 2: Yetkilendirme İsteğini ve Yanıtını İşleyin

Oyun istemciniz, mevcut görev için ihtiyaç duyduğu kapsamları isteyerek OAuth akışını başlatır. Kritik kısım, oyuncu isteği onayladıktan veya değiştirdikten sonra gelir. İstediğiniz her şeyi aldığınızı varsaymak yerine, yanıttaki verilen kapsamları kontrol etmelisiniz.

Callback'i işlemek için sözde kodda basitleştirilmiş bir örnek:

// After the player is redirected back to your game with an authorization code
async function handleOAuthCallback(authorizationCode) {
  // Exchange the code for tokens
  const tokenResponse = await fetch('/oauth/token', {
    method: 'POST',
    body: JSON.stringify({
      code: authorizationCode,
      client_id: CLIENT_ID,
      client_secret: CLIENT_SECRET,
      redirect_uri: REDIRECT_URI,
      grant_type: 'authorization_code'
    })
  });
  
  const tokens = await tokenResponse.json();
  
  // CRITICAL: Check the granted scopes
  const grantedScopes = tokens.scope.split(' ');
  
  // Now, adapt your game's functionality based on what was actually granted
  if (grantedScopes.includes('player.inventory.read')) {
    enableInventoryViewer();
  } else {
    disableInventoryViewer();
    showLimitedFunctionalityMessage();
  }
  
  if (grantedScopes.includes('match.history.read')) {
    enableStatTracking();
  } else {
    disableStatTracking();
  }
  
  // Store the token with its specific scope set
  storeUserSession({
    accessToken: tokens.access_token,
    scopes: grantedScopes,
    // ... other token data
  });
}

Adım 3: Oyun Arayüzünüzü Kısmi Onaylar için Tasarlayın

Kullanıcı deneyimi OAuth ekranında bitmez. Oyununuz, ideal olarak istediğinizden daha az izne sahip bir token'ı zarif bir şekilde ele almalıdır.

UI/UX için En İyi Uygulamalar:

  • Şeffaf Olun: Bir özellik eksik izinler nedeniyle devre dışıysa, oyuncuya nedenini ve daha sonra erişimi nasıl verebileceğini söyleyin.
  • Yükseltme Yolu Sunun: Ayarlar menünüze, isteğe bağlı kapsamlarla OAuth akışını yeniden başlatan bir "Daha Fazla İzin Ver" butonu ekleyin.
  • Zarif Bir Şekilde Küçültün: match.history.write kapsamına sahip olmayan bir istatistik takip uygulaması, özel raporları kaydetme yeteneği olmadan yine de istatistikleri göstermelidir.

Oyun OAuth Onayı için 5 En İyi Uygulama

  1. Minimum Uygulanabilir Kapsamları İsteyin: Her özellik için gereken mutlak minimum kapsamları belirleyin. Diğer her şeyi isteğe bağlı yapın. Bir liderlik tablosu görüntüleyicisi yalnızca match.history.read'e ihtiyaç duyar, match.history.write'a değil.

  2. İzin İsteklerini Bağlamsallaştırın: Girişte tüm olası kapsamları istemeyin. inventory.write'ı yalnızca oyuncu yük düzenleyiciyi gerçekten kullanmaya çalıştığında isteyin. Bu, bağlam yoluyla güven oluşturur.

  3. Kapsam Setlerini Oturum Başına Saklayın: Bir oyuncu farklı yardımcı uygulamalara farklı kapsamlar verebilir. Backend'iniz her erişim token'ını belirli verilen kapsamlarıyla ilişkilendirmeli ve bunları API düzeyinde uygulamalıdır.

  4. Kapsam Tanımlarınızı Denetleyin: Kapsam listenizi düzenli olarak gözden geçirin. Geliştirmenin başlarında tanımladığınız artık kullanılmayan kapsamlar var mı? Bunları kullanımdan kaldırın. Daha küçük ve temiz bir kapsam listesi daha az göz korkutucudur.

  5. Her Uç Noktada Kapsam Doğrulaması Uygulayın: API'niz, gelen erişim token'ının istenen kaynak için gerekli kapsama sahip olduğunu kontrol etmelidir. Bu, güvenlik için tartışılmazdır. Yalnızca player.profile.read kapsamına sahip bir token, /api/inventory çağrısından engellenmelidir.

Bu akışın tamamını—istemci yapılandırması, dinamik onay ekranları, kapsam farkında token işleme ve backend doğrulaması—oluşturmak önemli bir iştir. Yetkilendirme sunucunuzla derin entegrasyon ve dikkatli durum yönetimi gerektirir. horizOn gibi bir backend hizmetinin haftalarca geliştirme süresi kazandırabileceği yer burasıdır. horizOn'un kimlik doğrulama sistemi, bu modern, granüler onay desenleri düşünülerek oluşturulmuştur ve kapsam doğrulamasını ve kısmi onayları kutudan çıktığı gibi işleyen önceden yapılandırılmış uç noktalar ve SDK'lar sağlar.

Güvenlik Etkileri: Oyun Backend'leri için Neden Önemli

Granüler onay yalnızca bir UX iyileştirmesi değildir; bir güvenlik mimarisi desenidir. Tehlikeye girmiş bir token'ın patlama yarıçapını sınırlayarak oyuncularınızı ve oyun ekonominizi korursunuz.

Kötü niyetli bir üçüncü taraf uygulama, bir oyuncuyu yalnızca match.history.read vermeye ikna edebildiyse, envanterine veya para birimine dokunamaz. En az ayrıcalık ilkesi, güvenli sistem tasarımının temelidir. Tehlikeye girmelere dayanacak backend'ler mimarisi hakkında daha derin bir inceleme için Star Citizen veri ihlali analizimize göz atın.

Sonuç: Kontrol Yoluyla Güven Oluşturmak

Ya hep ya hiçten görev tabanlı OAuth onayına geçiş, hem oyuncular hem de geliştiriciler için bir kazanımdır. Oyuncular talep ettikleri kontrolü elde eder; bu da daha yüksek yetkilendirme oranları ve güven sağlar. Geliştiriciler, kullanıcıları korkutmadan daha zengin entegrasyonlar sağlayan daha doğru izin setleri elde eder.

Mevcut OAuth uygulamanızı denetleyerek başlayın. Hangi kapsamların temel işlevsellik için gerçekten gerekli olduğunu ve hangilerinin isteğe bağlı yapılabileceğini belirleyin. Kısmi onayları işlemek için sunucu tarafı mantığını uygulayın ve oyun arayüzünüzü, her iznin ne sağladığını oyunculara net bir şekilde iletecek şekilde güncelleyin.

Oyunculara seçim vererek oyununuzu sınırlamıyorsunuz—uzun vadeli etkileşimi ve üçüncü taraf araçlar ile yardımcı uygulamalar için daha sağlıklı bir ekosistemi destekleyen bir güven temeli inşa ediyorsunuz.


Kaynak: Ya hep ya hiçten görev tabanlı OAuth onayına