Bu sayfada, OAuth 2.0 ile entegrasyonla ilgili bazı genel en iyi uygulamalar ele alınmaktadır. Uygulama türünüz ve geliştirme platformunuzla ilgili özel talimatlara ek olarak bu en iyi uygulamaları da göz önünde bulundurun. Ayrıca uygulamanızı üretime hazır hale getirme ile ilgili tavsiyelere ve Google'ın OAuth 2.0 politikalarına bakın.
İstemci kimlik bilgilerini güvenli bir şekilde işleme
OAuth istemci kimlik bilgileri, uygulamanızın kimliğini tanımlar ve dikkatli bir şekilde işlenmelidir. Bu kimlik bilgilerini yalnızca güvenli bir depolama alanında saklayın. Örneğin, Google Cloud Secret Manager gibi bir gizli anahtar yöneticisi kullanın. Kimlik bilgilerini kod gömmeyin, kod deposuna kaydetmeyin veya herkese açık olarak yayınlamayın.
Kullanıcı jetonlarını güvenli bir şekilde işleme
Kullanıcı jetonları, uygulamanız tarafından kullanılan hem yenileme jetonlarını hem de erişim jetonlarını içerir. Jetonları bekleme durumunda güvenli bir şekilde saklayın ve hiçbir zaman düz metin olarak iletmeyin. Platformunuza uygun güvenli bir depolama sistemi kullanın. Örneğin, Android'de Keystore, iOS ve macOS'te Anahtar Zinciri Hizmetleri veya Windows'da Kimlik Bilgisi Dolabı.
Artık ihtiyaç duyulmayan jetonları iptal edin ve sistemlerinizden kalıcı olarak silin.
Ayrıca, platformunuz için aşağıdaki en iyi uygulamaları da göz önünde bulundurun:
- Birçok kullanıcı için jeton depolayan sunucu tarafı uygulamalarında, jetonları kullanımda değilken şifreleyin ve veri deponuzun internet üzerinden herkese açık şekilde erişilebilir olmadığından emin olun.
- Masaüstü uygulamalarında, erişim jetonlarıyla değiştirilebilecek yetkilendirme kodları almak için Kod Değişimi İçin Doğrulama Anahtarı (PKCE) protokolünün kullanılması önemle tavsiye edilir.
DPoP ile gönderen kısıtlamalı jetonlar
Uygulamanızı jeton hırsızlığına ve tekrar oynatma saldırılarına karşı korumak için DPoP (Sahiplik Kanıtı Gösterme) kullanarak jetonlarınızı gönderenle kısıtlayabilirsiniz. Standart hamiline ait jetonlar, bunları ele geçiren herhangi bir tarafça kullanılabilirken DPoP jetonları, istemci tarafından oluşturulan ve tutulan benzersiz bir anahtar çiftine kriptografik olarak bağlıdır.
DPoP kullanılırken istemci, jeton isterken veya yenilerken jeton uç noktasına bir kanıt (imzalı JSON Web Token) sunar. Bu kanıt, istemcinin jetona bağlı ortak anahtara karşılık gelen özel anahtara sahip olduğunu gösterir. DPoP'ye bağlı bir yenileme jetonu sızdırılırsa saldırgan, özel anahtar olmadan bu jetonu tekrar kullanamaz.
DPoP, kapsamlı koruma sağlamak için PKCE ile birlikte çalışır:
- PKCE, ilk yönlendirme akışı sırasında yetkilendirme kodunu korur.
- DPoP, uzun ömürlü yenileme jetonunu koruyarak güvenliğinin ihlal edilmesi durumunda tekrar saldırılarını önler.
Uygulamanız aşağıdaki durumlardan birine uyuyorsa DPoP'yi kullanmanız önemle tavsiye edilir:
- Yenileme jetonlarının sızdırılmaya daha açık olabileceği yüklü veya masaüstü uygulaması (ya da ön uç için arka uç sunucusuyla eşlenmiş tek sayfalık uygulama) olarak çalışır.
- Jeton sızıntısının etkisinin önemli olduğu, son derece hassas verilere veya yüksek değerli API'lere erişir.
- Gönderen kısıtlamalı jetonları zorunlu kılan katı uygunluk veya güvenlik standartlarını karşılaması gerekiyorsa
DPoP kanıtları oluşturma ve DPoP'ye bağlı jetonlar isteme ile ilgili ayrıntılı talimatlar için DPoP Kullanım Kılavuzu'nu inceleyin.
State parametresini kullanma
OAuth 2.0 yanıtını işlemeden önce Google'dan alınan state değerinin, yetkilendirme isteğinizde gönderilen state değeriyle eşleştiğini doğrulayın. state parametresi, uygulamanız tarafından oluşturulan benzersiz ve tahmin edilemeyen bir değer olmalıdır.
state parametresinin kullanılması, isteğin kötü amaçlı bir komut dosyası tarafından değil, kullanıcı tarafından yapıldığından emin olunmasına yardımcı olur ve siteler arası istek sahtekarlığı (CSRF) saldırıları riskini azaltır.
Yenileme jetonunun iptalini ve geçerlilik süresinin dolmasını yönetme
Uygulamanız çevrimdışı erişim için yenileme jetonu istediyse bu jetonların geçersiz kılınmasını veya süresinin dolmasını da yönetmeniz gerekir. Jetonlar farklı nedenlerle geçersiz kılınabilir. Örneğin, jetonun süresi dolmuş olabilir veya uygulamalarınızın erişimi kullanıcı ya da otomatik bir işlem tarafından iptal edilmiş olabilir. Bu durumda, uygulamanızın nasıl yanıt vermesi gerektiğini dikkatlice düşünün. Örneğin, kullanıcıdan bir sonraki oturum açışında izin isteyebilir veya verilerini temizleyebilirsiniz. Jeton iptaliyle ilgili bildirim almak için Hesaplar Arası Koruma hizmetiyle entegrasyon yapın.
Artımlı yetkilendirme kullanma
Uygulamanızın işlev için ihtiyaç duyduğu uygun OAuth kapsamlarını istemek üzere artımlı yetkilendirme kullanın.
Uygulamanızın temel işlevi için gerekli olmadığı sürece kullanıcı ilk kez kimlik doğrulaması yaptığında verilere erişim izni istemeyin. Bunun yerine, mümkün olan en küçük ve en sınırlı kapsamları seçme ilkesine uyarak yalnızca bir görev için gereken belirli kapsamları isteyin.
Kullanıcılarınızın, uygulamanızın neden erişim istediğini ve verilerin nasıl kullanılacağını anlamalarına yardımcı olmak için kapsamları her zaman bağlam içinde isteyin.
Örneğin, uygulamanız şu modeli izleyebilir:
- Kullanıcı, uygulamanızla kimlik doğrulaması yapar.
- Ek kapsam istenmez. Uygulama, kullanıcının ek veri veya erişim gerektirmeyen özellikleri keşfetmesine ve kullanmasına olanak tanıyan temel işlevler sunar.
- Kullanıcı, ek verilere erişim gerektiren bir özellik seçer.
- Uygulamanız, bu özellik için gerekli olan bu belirli OAuth kapsamı için bir yetkilendirme isteği gönderir. Bu özellik birden fazla kapsam gerektiriyorsa birden fazla kapsam için en iyi uygulamaları izleyin.
- Kullanıcı isteği reddederse uygulama, özelliği devre dışı bırakır ve kullanıcıya tekrar erişim isteğinde bulunması için ek bağlam sağlar.
Birden fazla kapsam için izinleri yönetme
Aynı anda birden fazla kapsam istediğinizde kullanıcılar, istediğiniz tüm OAuth kapsamlarını vermeyebilir. Uygulamanız, kapsamların reddedilmesini ilgili işlevi devre dışı bırakarak işlemelidir.
Uygulamanızın temel işlevi birden fazla kapsam gerektiriyorsa izin istemeden önce bunu kullanıcıya açıklayın.
Kullanıcıya yalnızca, kapsamı gerektiren belirli bir özelliği kullanma niyetini açıkça belirttikten sonra tekrar istem gösterebilirsiniz. Uygulamanız, OAuth kapsamları istemeden önce kullanıcıya alakalı bağlam ve gerekçe sunmalıdır.
Uygulamanızın tek seferde istediği kapsam sayısını en aza indirmelisiniz. Bunun yerine, özellikler ve işlevler bağlamında kapsam istemek için artımlı yetkilendirmeyi kullanın.
Güvenli tarayıcılar kullanma
Web'de OAuth 2.0 yetkilendirme istekleri yalnızca tam özellikli web tarayıcılarından yapılmalıdır. Diğer platformlarda doğru OAuth istemci türünü seçtiğinizden ve OAuth'u platformunuza uygun şekilde entegre ettiğinizden emin olun. İsteği, mobil platformlardaki web görünümleri (ör. Android'de WebView veya iOS'te WKWebView) dahil olmak üzere yerleşik tarama ortamları üzerinden yönlendirmeyin. Bunun yerine, platformunuz için önerilen OAuth kitaplıklarını veya Google ile Oturum Açma'yı kullanın.
OAuth istemcilerini manuel olarak oluşturma ve yapılandırma
Kötüye kullanımı önlemek için OAuth istemcileri programatik olarak oluşturulamaz veya değiştirilemez. Hizmet şartlarını açıkça kabul etmek, OAuth istemcinizi yapılandırmak ve OAuth doğrulamasına hazırlanmak için Google Cloud Console'u kullanmanız gerekir.
Otomatik iş akışları için hizmet hesaplarını kullanabilirsiniz.
Kullanılmayan OAuth istemcilerini kaldırma
OAuth 2.0 istemcilerinizi düzenli olarak denetleyin ve uygulamanızın artık ihtiyaç duymadığı veya eskiyen istemcileri proaktif olarak silin. Kullanılmayan istemcileri yapılandırılmış olarak bırakmak, istemci kimlik bilgilerinizin güvenliği ihlal edilirse istemci kötüye kullanılabileceğinden potansiyel bir güvenlik riski oluşturur.
Kullanılmayan istemcilerden kaynaklanan riskleri daha da azaltmak için altı aydır etkin olmayan OAuth 2.0 istemcileri otomatik olarak silinir.
Önerilen en iyi uygulama, otomatik silme işlemini beklemek yerine kullanılmayan istemcileri proaktif olarak kaldırmaktır. Bu uygulama, uygulamanızın saldırı yüzeyini en aza indirir ve iyi bir güvenlik hijyeni sağlar.