Bu sayfada, OAuth 2.0 ile entegrasyon için bazı genel en iyi uygulamalar ele alınmaktadır. Uygulama türünüz ve geliştirme platformunuzla ilgili özel talimatların yanı sıra aşağıdaki en iyi uygulamaları da göz önünde bulundurun. Ayrıca, uygulamanızı üretim için hazırlama ile ilgili tavsiyelere ve Google'ın OAuth 2.0 politikalarına da göz atı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 kullanılmalıdır. Bu kimlik bilgilerini yalnızca güvenli depolama alanında saklayın. Örneğin, Google Cloud Secret Manager gibi bir Secret Manager kullanın. Kimlik bilgilerini sabit kodlamayın, kod deposuna işlemeyin 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ı dinlenirken 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 Keychain Services veya Windows'da Credential Locker.
Artık ihtiyaç duyulmayan jetonları iptal edin ve sistemlerinizden kalıcı olarak silin.
Ayrıca platformunuz için şu en iyi uygulamaları da göz önünde bulundurun:
- Birçok kullanıcının jetonlarını depolayan sunucu tarafı uygulamalar için jetonları dinlenme sırasında şifreleyin ve veri deponuzun internette herkese açık olarak erişilebilir olmadığından emin olun.
- Masaüstü uygulamalarında, erişim jetonlarıyla değiştirilebilen yetkilendirme kodları almak için Proof Key for Code Exchange (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 yeniden oynatma saldırılarına karşı korumak için DPoP (Demonstrating Proof-of-Possession) kullanarak jetonlarınızı gönderenle sınırlamayı düşünebilirsiniz. Standart Bearer jetonları, bunları yakalayan 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ı bir 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'a bağlı bir yenileme jetonu sızdırılırsa bu özel anahtar olmadan saldırgan tarafından yeniden oynatılamaz.
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 korur ve güvenliği ihlal edilirse yeniden oynatma saldırılarını önler.
Uygulamanız aşağıdaki koşulları karşılıyorsa DPoP'u kullanmanız önemle tavsiye edilir:
- Yenileme jetonlarının sızdırılmaya daha yatkın olabileceği bir genel istemci (ör. tek sayfalık uygulama veya yüklü uygulama) olarak çalışır.
- Jeton sızıntısının etkisinin önemli olduğu, yüksek düzeyde hassas verilere veya yüksek değerli API'lere erişir.
- Gönderen kısıtlı jetonları zorunlu kılan sıkı uygunluk veya güvenlik standartlarını karşılaması gerekir.
DPoP kanıtları oluşturma ve DPoP'a bağlı jetonlar isteme hakkında ayrıntılı talimatlar için DPoP belgelerine bakın.
State parametresini kullanma
Bir 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ği kötü amaçlı bir komut dosyası yerine kullanıcının yaptığından emin olmaya yardımcı olur ve siteler arası istek sahteciliği (CSRF) saldırıları riskini azaltır.
Yenileme jetonunun iptalini ve süresinin dolmasını işleme
Uygulamanız çevrimdışı erişim için yenileme jetonu istiyorsa 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 süreç 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ının bir sonraki oturum açma işleminde istemde bulunabilir veya verilerini temizleyebilirsiniz. Jeton iptali hakkında bildirim almak için Hesaplar Arası Koruma hizmetiyle entegrasyon yapın.
Artımlı yetkilendirme kullanma
Uygulamanızın işlevselliğe ihtiyacı olduğunda uygun OAuth kapsamlarını istemek için artımlı yetkilendirme kullanın.
Uygulamanızın temel işlevi için gerekli olmadığı sürece, kullanıcı ilk kez kimlik doğruladığında verilere erişim isteğinde bulunmamalısınız. 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 kimliğini doğrular.
- Başka kapsam istenmiyor. Uygulama, kullanıcının ek veri veya erişim gerektirmeyen özellikleri keşfetmesine ve kullanmasına olanak tanıyan temel işlevler sunuyor.
- 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 yetkilendirme isteğinde bulunuyor. Bu özellik birden fazla kapsam gerektiriyorsa birden fazla kapsamla ilgili en iyi uygulamaları uygulayın.
- 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 bilgisi verir.
Birden fazla kapsam için izni işleme
Kullanıcılar, tek seferde birden fazla kapsam isteğinde bulunurken istediğiniz tüm OAuth kapsamlarını vermeyebilir. Uygulamanız, ilgili işlevleri devre dışı bırakarak kapsamların reddedilmesini ele almalıdır.
Uygulamanızın temel işlevi için birden fazla kapsam gerekiyorsa izin istemeden önce bunu kullanıcıya açıklayın.
Kullanıcı, kapsam gerektiren belirli bir özelliği kullanma niyetini açıkça belirttikten sonra kullanıcıya tekrar istemde bulunabilirsiniz. Uygulamanız, OAuth kapsamları istemeden önce kullanıcıya alakalı bağlam ve gerekçe sağlamalıdır.
Uygulamanızın aynı anda istediği kapsam sayısını en aza indirmeniz gerekir. Bunun yerine, kapsamları özellikler ve işlevler bağlamında istemek için artımlı yetkilendirmeyi kullanın.
Güvenli tarayıcılar kullanın
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, Android'deki WebView veya iOS'teki WKWebView gibi mobil platformlardaki WebView'lar da dahil olmak üzere yerleştirilmiş tarama ortamları üzerinden yönlendirmeyin. Bunun yerine, platformunuz için önerilen OAuth kitaplıklarını veya Google ile oturum açma özelliğini kullanın.
OAuth istemcilerinin manuel olarak oluşturulması ve yapılandırılması
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 bunun yerine 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 eski hale gelmiş olanları proaktif bir şekilde silin. Kullanılmayan istemcilerin yapılandırılmış olarak bırakılması, istemci kimlik bilgilerinizin güvenliği ihlal edilirse istemcinin kötüye kullanılabileceği için olası 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.