OAuth Nedir? Google ile Giriş ve Uygulama Yetkilendirme
OAuth, bir uygulamanın şifrenizi öğrenmeden başka bir servisteki verinize sınırlı erişim almasını sağlar. Google ile giriş örneğiyle anlatıyorum.
İçindekiler
Bir sitede “Google ile devam et” butonuna bastığınızda Google’ın kendi sayfası açılır, hangi bilgilerin paylaşılacağı sorulur ve onay verdiğinizde siteye giriş yapmış olursunuz. Bu sırada site şifrenizi hiç görmez. Bu akışın arkasındaki standart OAuth’tur. Peki OAuth nedir? OAuth 2.0, bir uygulamanın kullanıcı adına başka bir servisteki kaynaklara, kullanıcının şifresini öğrenmeden ve yalnızca izin verilen kapsamda erişmesini sağlayan bir yetkilendirme çerçevesidir. Bu yazıda nasıl çalıştığını, işletmenize ne kazandırdığını ve kurarken nelere dikkat etmek gerektiğini anlatacağım.
OAuth hangi sorunu çözer?
OAuth’tan önce bir uygulamanın, örneğin e-posta kişilerinize erişmesi için ona doğrudan e-posta şifrenizi vermeniz gerekirdi. Bu, evinizin anahtarını sadece mektup kutusunu açsın diye birine vermek gibiydi: Uygulama her şeye erişebilir, siz de şifrenizi değiştirmeden bu erişimi geri alamazdınız.
OAuth bu sorunu “vale anahtarı” mantığıyla çözer. Uygulamaya ana anahtarınızı değil, sınırlı yetkili ve süreli bir anahtar (erişim token’ı) verilir. Bu anahtarla yalnızca izin verdiğiniz işlemler yapılabilir ve istediğiniz zaman hesap ayarlarınızdan iptal edebilirsiniz.
OAuth akışındaki roller
OAuth’u anlamanın en kolay yolu, dört rolü tanımaktır:
- Kaynak sahibi: Verinin sahibi olan kullanıcı, yani siz.
- İstemci: Erişim isteyen uygulama; örneğin web siteniz veya mobil uygulamanız.
- Yetkilendirme sunucusu: Kullanıcının kimliğini doğrulayan ve onay sonrası token veren taraf; örneğin Google’ın giriş sistemi.
- Kaynak sunucusu: Verinin tutulduğu API; örneğin takvim veya profil bilgisi servisi.
OAuth nedir, adım adım nasıl işler?
Web ve mobil uygulamalarda bugün önerilen akış, PKCE eklentisiyle birlikte kullanılan yetkilendirme kodu (authorization code) akışıdır. Basitleştirilmiş hâliyle:
- Kullanıcı sitenizde “Google ile devam et” butonuna basar.
- Tarayıcı, Google’ın giriş sayfasına yönlendirilir. İstekte uygulamanızın kimliği ve hangi izinlerin (scope) istendiği yer alır.
- Kullanıcı Google’a giriş yapar ve izin ekranında onay verir.
- Google, kullanıcıyı önceden kayıtlı geri dönüş adresinize kısa ömürlü bir kodla yönlendirir.
- Sunucunuz bu kodu, arka planda Google’a göndererek erişim token’ıyla değiştirir.
- Uygulamanız token ile yalnızca izin verilen bilgilere erişir.
PKCE, bu kodun yolda ele geçirilse bile başkası tarafından kullanılmasını engelleyen ek bir doğrulama adımıdır; özellikle mobil uygulamalar ve tarayıcıda çalışan uygulamalar için önemlidir. Eskiden kullanılan ve token’ı doğrudan adres çubuğunda döndüren “implicit” akış artık güvenlik açısından önerilmiyor.
OAuth ile OpenID Connect farkı
Teknik olarak OAuth bir yetkilendirme standardıdır; “bu uygulama şu veriye erişebilir mi?” sorusunu cevaplar. “Bu kullanıcı kim?” sorusu ise kimlik doğrulama sorusudur. Google ile giriş gibi senaryolarda bu boşluğu OpenID Connect doldurur. OpenID Connect, OAuth 2.0’ın üzerine kurulu bir katmandır ve kullanıcının kimliğini taşıyan bir kimlik token’ı (ID token) ekler. Bu token JWT biçimindedir; yapısını JWT nedir yazısında anlattım.
| OAuth 2.0 | OpenID Connect | |
|---|---|---|
| Cevapladığı soru | Uygulama neye erişebilir? | Kullanıcı kim? |
| Ana çıktı | Erişim token’ı | Kimlik token’ı (ve erişim token’ı) |
| Tipik kullanım | Takvime etkinlik ekleme, dosyalara erişim | “Google ile giriş” gibi tek tıkla oturum açma |
İşletmeniz için OAuth ne kazandırır?
- Daha kolay kayıt: Kullanıcılar yeni bir şifre oluşturmadan kayıt olabilir; üyelik formunda vazgeçme azalabilir.
- Daha az şifre sorumluluğu: Dış girişle gelen kullanıcıların şifrelerini siz saklamazsınız.
- Doğrulanmış e-posta: Kimlik sağlayıcıdan gelen e-posta adresi genellikle doğrulanmış olur.
- Entegrasyon imkânı: Randevu sisteminizin kullanıcının takvimine etkinlik eklemesi gibi işler, kullanıcının izniyle güvenle yapılabilir.
Somut bir örnekle düşünelim: Bir fizik tedavi merkezi, online randevu alan danışanlarının seans saatini kendi takvimlerine otomatik eklemek istiyor. Danışanın takvim şifresini istemek hem güvensiz hem de kabul edilemez olurdu. OAuth ile danışan yalnızca “takvime etkinlik ekleme” iznini verir; merkez ne e-postalarını ne de diğer etkinliklerini görebilir. OAuth nedir sorusunun işletme açısından cevabı tam olarak budur: müşterinin güvenini zedelemeden ona kolaylık sağlamak.
Üyelik sistemli bir site planlıyorsanız bu konuyu üyelik sistemi olan web sitesi yazısıyla birlikte düşünmenizi öneririm.
Kurulumda dikkat edilmesi gerekenler
- Yalnızca gerekli izinleri isteyin: Giriş için profil ve e-posta yeterliyse fazlasını istemek, kullanıcıyı tedirgin eder ve sağlayıcının inceleme sürecini uzatabilir.
- Geri dönüş adreslerini kesin tanımlayın: Joker karakterli veya açık uçlu yönlendirme adresleri, token’ların yanlış yere gitmesine yol açabilir.
- State parametresini kullanın: Akışın sizin başlattığınız istekle eşleştiğini doğrulamak, sahte isteklere karşı koruma sağlar.
- İstemci sırrını sunucuda tutun: Gizli anahtar mobil uygulamaya veya tarayıcı koduna konmaz.
- Hesap eşleştirmeyi planlayın: Aynı e-postayla hem şifreli hem Google ile kayıt olan kullanıcının nasıl eşleşeceği önceden kararlaştırılmalıdır.
Google, Apple veya Microsoft gibi sağlayıcıların uygulama kayıt süreçleri, izin inceleme kuralları ve marka kullanım şartları zaman içinde değişebilir; güncel şartları sağlayıcının geliştirici sitesinden kontrol edin. API güvenliğinin diğer katmanları için API güvenliği yazısına göz atabilirsiniz.
Bu işi nasıl birlikte yaparız?
Sitenize ya da uygulamanıza “Google ile giriş” veya başka bir OAuth entegrasyonu eklemek istediğinizde şu adımları izliyorum:
- İhtiyacı netleştirme: Yalnızca giriş mi, yoksa takvim veya dosya gibi verilere erişim de mi gerekiyor; hangi sağlayıcılar isteniyor, birlikte belirleriz.
- Kapsam ve teklif: Mevcut üyelik yapınızla nasıl eşleşeceğini planlar, gerekli izinleri ve işi teklifte netleştiririm.
- Geliştirme ve test: Uygulama kaydını sizin hesabınız üzerinden yapar, akışı test ortamında kurar; iptal edilen izin ve süresi dolan token senaryolarını denerim.
- Yayın ve destek: Canlıya alır, sağlayıcı tarafındaki ayarları belgeleyerek teslim eder, sonrasında destek veririm.
Projenizi anlatmak için iletişim sayfasından bana ulaşabilirsiniz.
Sık sorulan sorular
Google ile giriş yaptığımda site şifremi görür mü?
Hayır. Şifre yalnızca Google’ın sayfasında girilir. Site, Google’dan yalnızca izin verdiğiniz bilgileri ve bir token alır.
OAuth ile JWT aynı şey mi?
Hayır. OAuth bir yetkilendirme çerçevesidir; JWT ise bir token biçimidir. OAuth akışlarında token’lar JWT biçiminde olabilir ama zorunlu değildir.
Verdiğim izni nasıl geri alırım?
Kimlik sağlayıcının hesap ayarlarında, bağlı uygulamalar bölümünden ilgili uygulamanın erişimini kaldırabilirsiniz.
WordPress sitesine Google ile giriş eklenebilir mi?
Evet. Hazır eklentilerle ya da özel geliştirmeyle eklenebilir. Mevcut üyelerle eşleştirme ve izin kapsamı baştan planlanmalıdır.
Sonuç
OAuth nedir sorusunun özü, şifre paylaşmadan sınırlı ve geri alınabilir yetki vermektir. OpenID Connect ile birlikte kullanıldığında kullanıcılarınıza tek tıkla güvenli giriş imkânı sunar. Sitenize veya uygulamanıza OAuth tabanlı giriş eklemek isterseniz bana yazabilirsiniz.
