OAuth
- Okunuşu
- o-ot
Kısaca
OAuth, bir uygulamanın kullanıcının parolasını hiç görmeden başka bir servisteki verilerine erişmesini sağlayan açık bir yetkilendirme standardıdır.
OAuth nedir?
OAuth yaygın bir sorunu çözer: bir zamanlama aracı gibi bir uygulamanın, takvim hesabınız gibi başka bir serviste tutulan verilere erişmesi gerekir, ama parolanızı vermemelisiniz. OAuth ile verinizi tutan servise doğrudan giriş yaparsınız, kapsam (scope) adı verilen belirli izinleri onaylarsınız ve uygulama yalnızca bu izinlerle sınırlı bir erişim token'ı alır.
Kullanımdaki sürüm OAuth 2.0'dır; OAuth 2.1 ise güncel en iyi uygulamaları bir araya getirir. Web ve mobil uygulamalar için önerilen akış, PKCE'li authorization code akışıdır: uygulama sizi yetkilendirme sunucusuna yönlendirir, siz giriş yapıp onay verirsiniz, sunucu kısa ömürlü bir kodla geri yönlendirir ve uygulama bu kodu, çoğunlukla bir refresh token'la birlikte, erişim token'ıyla değiştirir. Uygulama daha sonra erişim token'ını API'ye gönderir; API veriyi döndürmeden önce onu denetler.
Otel oda kartı iyi bir benzetmedir. Resepsiyon, yani yetkilendirme sunucusu, kimliğinizi bir kez kontrol eder ve size yalnızca belirli kapıları sınırlı süre açan bir kart verir; API gibi kapılar yalnızca kartı kontrol eder ve kimliğinizi bir daha görmesi gerekmez.
OAuth yetkilendirmeyle ilgilidir, yani bir uygulamanın ne yapmasına izin verildiğiyle; kimlik doğrulamayla, yani kullanıcının kim olduğuyla değil. Başka yerdeki mevcut bir hesapla oturum açmanızı sağlayan sosyal giriş düğmeleri genellikle OpenID Connect'e (OIDC) dayanır; OIDC, OAuth 2.0'ın üzerine kullanıcıyı tanımlayan bir ID token ekleyen bir katmandır. OAuth'u güvenle kullanmak; PKCE kullanmak, yönlendirme URL'lerini tam olarak eşleştirmek, state değerini denetlemek, yalnızca ihtiyacınız olan kapsamları istemek ve token'ları URL'lerden ve günlüklerden uzak tutmak demektir.
Bir bakışta
Önemli noktalar
- OAuth, uygulamaların kullanıcı parolalarını toplamadan kaynaklara erişmesini sağlar.
- Kullanıcılar, kapsam adı verilen sınırlı izinleri onaylar.
- Uygulamalar kimlik bilgileri yerine, genellikle kısa ömürlü erişim token'ları alır.
- PKCE'li authorization code akışı önerilen akıştır.
- OpenID Connect, OAuth'un üzerine giriş (kimlik doğrulama) ekler.
Örnek
// Send the user to the authorization server to log in and consent
const params = new URLSearchParams({
response_type: "code", // ask for an authorization code
client_id: "my-calendar-app",
redirect_uri: "https://app.example.com/callback",
scope: "calendar.read", // only the permission that is needed
state: savedState, // random value, checked on return
code_challenge: pkceChallenge, // PKCE: protects the returned code
code_challenge_method: "S256",
});
window.location.href = `https://auth.example.com/authorize?${params}`;
// Later, the app exchanges the returned ?code=... for an access tokenSık sorulan sorular
OAuth ile OpenID Connect arasındaki fark nedir?
OAuth 2.0 yetkilendirme içindir: uygulamaya bir API'yi çağırması için erişim token'ı verir. OpenID Connect, OAuth'un üzerine kurulur ve kimlik doğrulama ekler; uygulamaya kullanıcının kim olduğunu söyleyen bir ID token verir.
OAuth, JWT ile aynı şey midir?
Hayır. OAuth, uygulamaların token'ları nasıl elde edip kullanacağını tanımlayan bir protokoldür; JWT ise bir token biçimidir. Birçok OAuth sunucusu erişim token'larını JWT olarak verir, ancak OAuth bunu zorunlu kılmaz.
PKCE nedir?
PKCE, Proof Key for Code Exchange'in kısaltmasıdır; authorization code akışına tek kullanımlık bir sır ekleyerek çalınan bir kodun başkası tarafından token ile değiştirilmesini engeller. Web ve mobil uygulamalar dahil tüm OAuth istemcileri için önerilir.
Sık karşılaştırılanlar
- OAuth vs SSOOAuth, uygulamanın başka servisteki kullanıcı verisine parolasız erişmesini sağlar; SSO ise birçok uygulamaya tek giriştir, SAML veya OpenID Connect'e dayanır.
- OAuth vs OpenID ConnectOAuth 2.0 ile uygulama access token'la kullanıcı adına API'ye erişir; OpenID Connect ise imzalı ID token'la kullanıcının kim olduğunu söyleyen bir katman ekler.
- JWT vs OAuthOAuth, uygulamaya kullanıcı verisine sınırlı erişim veren bir çerçeve, JWT ise bir token biçimidir. Rakip değiller: OAuth çoğu zaman JWT erişim token'ı verir.
İlgili sayfalar
- JWTGüvenlik, s. 17JWT, kullanıcı kimliği ve son kullanma zamanı gibi bilgileri taşıyan, imzalı ve kompakt bir token'dır; sunucunun oturum aramadan istekleri doğrulamasını sağlar.
- APIBackend ve API'ler, s. 2API, bir yazılımın başka bir yazılımdan veri ya da işlem talep etmesini sağlayan, belgelenmiş ve öngörülebilir kurallar bütünüdür.
- HTTPSGüvenlik, s. 15HTTPS, tarayıcı ile web sitesi arasındaki trafiği TLS ile şifreleyen, verileri dinlemeye ve değiştirilmeye karşı koruyan HTTP'nin güvenli sürümüdür.
- CSRFGüvenlik, s. 5CSRF, oturum açmış kullanıcının tarayıcısını güvenilir bir siteye istenmeyen istek göndermeye kandıran, sitenin de gerçek kullanıcı eylemi sandığı saldırıdır.
- REST APIBackend ve API'ler, s. 38REST API, verileri URL'lerle tanımlanan kaynaklar olarak sunan ve istemcilerin onları standart HTTP metotlarıyla okuyup değiştirmesini sağlayan web API'sidir.
- YetkilendirmeGüvenlik, s. 48Yetkilendirme, kimliği doğrulanmış bir kullanıcının ya da servisin hangi verileri okuyabileceğine, değiştirebileceğine veya silebileceğine karar vermektir.
- OpenID ConnectGüvenlik, s. 22OpenID Connect (OIDC), OAuth 2.0 üzerine kurulu bir kimlik katmanıdır: uygulama, kullanıcıyı kimlik sağlayıcıyla oturum açtırıp imzalı bir ID token alır.
- Refresh TokenGüvenlik, s. 30Refresh token, uygulamanın yeniden giriş istemeden kısa ömürlü yeni access token'lar almak için kullandığı uzun ömürlü kimlik bilgisidir.
Kaynaklar
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin