# OAuth
OAuth açık standartlı bir yetkilendirme protokolüdür, genellikle internet kullanıcıları tarafından kendi Google, Microsoft, Facebook, Twitter, One Network vb. hesaplarının şifrelerini açığa çıkarmadan üçüncü parti web sitelerine erişmek için kullanılır. Genellikle OAuth kaynağın sahibi adına, kullanıcılara sunucu kaynakları için "güvenli temsili erişim" sağlıyor. Kaynak sahipleri için bir süreç başlatıyor. Bu süreçte kaynak sahiplerinin sunucu kaynaklarına herhangi bir kimlik paylaşımı olmadan üçüncü taraf erişim yetkisi sağlanıyor. Spesifik olarak Hypertext Transfer Protocol (HTTP) ile çalışması için tasarlanmış, OAuth temelde yetkili sunucu ile ve kaynak sahibinin onayı ile access tokenslerinin third-party kullanıcılarına verilmesine izin veriyor. Daha sonra third party, kaynak sunucudaki korumalı kaynaklara erişmek için access tokenlarını kullanıyor.
OAuth, OpenID ile bütünleşik ama ondan farklı bir servistir . OAuth aynı zamanda OATH'tan da farklıdır. OATH yetkilendirme için bir standart değil, kimlik doğrulama için referans bir mimaridir. Bununla birlikte kimlik doğrulama katmanı olan OIDC, OAuth 2.0 üzerine yapılandırıldığından beri OAuth direkt olarak OpenID Connect (OIDC) bağlıdır.


## Tarihçe.
OAuth Kasım 2006'da başladı, Blaine Cook Twitter OpenID uygulamasını geliştiriyordu. Bu sırada, Ma.gnolia OpenID'ye sahip üyelerinin Dashboard Widgets'leri yetkilendirerek kendi servisine erişebilmesi için bir çözüme ihtiyacı vardı. Magnolia'dan Cook, Chris Messina ve Larry Halff, David Recordon ile tanıştılar ve OpenID'yi Twitter and Ma.gnolia APIs ile kullanarak kimlik doğrulamayı devretmeyi görüştüler. API erişim yetkisi için open standards olmadığı sonucuna vardılar. ["kaynak belirt"]
Açık protokol için bir taslak öneri yazmaları için küçük grup ugulayıcıdan oluşan OAuth Discussion Group Nisan 2007'de oluşturuldu. Google'dan DeWitt Clinton OAuth projesini öğrendi ve projeye duyduğu ilgiyi üzerindeki çalışmaları destekleyerek gösterdi. Temmuz 2007'de ilk tanımlamayı yayınladılar. Eran Hammer joined and coordinated the many OAuth contributions creating a more formal specification. On December 4, 2007, the OAuth Core 1.0 final draft was released.
Kasım 2008 Minneapolis de yapılan 74. Internet Mühendisliği Görev Gücü (IETF) toplantısında düzenlenen OAuth BoF, protokolü IETF'e getirip daha standartlaştırma çalışmaları görüşmek için toplanıldı. Etkinlik katılımı yüksekti ve resmi olarak IETF içindeki OAuth çalışma grubunu kurmak için geniş bir destek geldi.
Nisan 2010'da OAuth 1.0 protokolü, yorumlar için bilgilendirme talebi olan RFC 5849 olarak yayımlandı.
31 Ağustos 2010'dan beri bütün third party Twitter uygulamaları için OAuth kullanımı mecburi oldu.
Ekim 2013'te RFC 6749 olarak OAuth 2.0 ve RFC 6750 olarak Bearer Token Usage yayımlandı. Bu iki standartta Requests for Comments takip ediliyor.


## OAuth 2.0.
OAuth 2.0, OAuth protokolünün bir sonraki versiyonu ve OAuth 1.0 ile uyumluluğu yok. OAuth 2.0 kullanıcı geliştirici kolaylığına, web uygulamalarına, masaüstü uygulamalarına, cep telefonlarına ve oturma odalarında kullanılan cihazlara spesifik yetki akışları sağlayarak odaklanmış oluyor. IETF OAuth çalışma grubu tarafından ilişkili RFC'ler ve spesifikasyonlar geliştiriliyor; Ekim 2012'de ana framework yayımlanıyor. (Eran Hammer'a göre 2010 sonunda bitirilmesi bekleniyordu. Fakat OAuth hakkındaki çelişen incelemeler nedeniyle Hammer çalışma grubundan ayrıldı.)
Facebook Graph API sadece OAuth 2.0 protokolünü destekliyor. Google bütün API'leri için kimlik doğrulama mekanizması olarak önerilen OAuth 2.0'ı destekliyor. 2011'den bu yana da Microsoft API'leri için OAuth 2.0'ı deneysel olarak desteklemeye başladı.
Ekim 2012'de OAuth 2.0 Framework and Bearer Token Usage yayımlandı. Diğer dokümanlar için OAuth çalışma grubunda çalışılmaya halen devam ediliyor.


## Güvenlik.
Nisan 2009'da 1.0 protokolündeki oturum odaklı güvenlik açığı duyuruldu. Bu açık OAuth Core 1.0 Section 6. Version 1.0'daki OAuth kimlik doğrulama akışını ("3-legged OAuth" olarak da bilinen) etkiliyor.
Bu sebeple OAuth Core protokolü bu sorunu ortadan kaldırmak üzere görevlendiriliyor.
OAuth 2.0 de imzalama, şifreleme, channel binding veya kullanıcı doğrulama desteklenmiyor. OAuth 2.0 de gizlilik ve sunucunun kimlik doğrulaması için tamamen TLS'e güveniliyor.
OAuth 2.0 da uygulamaların maruz kaldığı birçok güvenlik açığı vardı. Güvenlik uzmanları tarafından protokol, yapısı gereği emniyetsiz olarak tanımlandı ve spesifikasyona asıl katkı sağlayan, uygulama hatalarının neredeyse kaçınılmaz olduğunu belirtti.
Ocak 2013'te IETF OAuth 2.0 için birkaç tane tehdit modelleri tanımladı. Bunların arasından biri "Open Redirector"; 2014 baharında, Wang Jing tarafından "Covert Redirect" adı altında tanıtıldı.
Muhtemelen OAuth'daki en yıkıcı güvenlik açığı yemleme zafiyeti oldu : OAuth kullanan her web sitesi görsel olarak (teknik olarak değil) kullanıcıların master kimliklerindeki kullanıcı adı ve şifresini soruyor, bu ise sıradan kullanıcıların saldırganın web sitesinde karşılarına çıkacak olan kimlik bilgilerini çalmak için görsel olarak taklit edilmiş yerlere master kimlik bilgilerini vermelerini engelliyor. İki faktörle yapılan kimlik doğrulama bu saldırıya engel olmuyor, çünkü yemleme sitesi onu da çalabilir (ve hemen kullanabilir).


## Birlikte İşlemezlik.
OAuth 2.0 tanımlanmış bir protokolden çok framework olduğu için, OAuth 2.0 uygulamaları diğer OAuth 2.0 uygulamaları ile doğal olarak birlikte işler olmaları çok olanaklı değildir. Daha ileri ayrıntılı inceleme ve spesifıkasyon birlikte işlerlik için gereklidir.


## Kullanım.
OAuth yetkilendirme mekanizması olarak güvenli RSS/ATOM feedlerini tüketmek için kulanılır. Kimlik doğrulaması gereken RSS/ATOM feedlerinin tüketimi her zaman bir sorun olmuştur. Örneğin; güvenilir Google Site içindeki RSS feed, Google Reader kullanılarak tüketilemez. Bunun yerine Google sitesindeki RSS feed'e ulaşması için three-legged OAuth Google Reader da yetki verme için kullanılabilir.


## OAuth Kullanan OpenID vs. pseudo-authentication.
OAuth kimlik doğrulama protokolü yerine bir yetki verme protokolüdür. Kimlik doğrulama metodu olarak sadece OAuth kullanılması pseudo-authentication olarak da anılabilir. Aşağıdaki çizimlerde OpenID (özellikle kimlik doğrulama protokolü olarak tasarlandı) ve kimlik doğrulama için OAuth protokolleri arasındaki farkları belirtilmiştir.
Her iki processteki bağlantı akışı da benzer:
  - (çizimde yok) Kullanıcı uygulamadan kaynak veya site girişi için istek yapıyor.
  - Site kullanıcının kimliğinin doğrulanmadığını görüyor. Kimlik sağlayıcıya bir istek formüle ediyor, bunu şifreliyor ve bunu kullanıcıya yönlendirilen URL içinde bir kısımda gönderiyor.
  - Kullanıcının tarayıcısı, kimlik sağlayıcısı için yönlendirilen URL'in isteğini yapıyor, bu aynı zamanda uygulama isteği
  - Eğer gerekli olursa kimlik sağlayıcı kullanıcının doğruluğunu ispatlıyor (muhtemelen bunu kullanıcılara, kullanıcı adı ve şifre soruyor)
  - Kimlik sağlayıcı tatmin olduğunda kullanıcının doğruluğu yeterli bir şekilde kanıtlanmış oluyor. Uygulama isteği gönderme, yanıtı formüle etme ve bunu kullanıcıya geri gönderme bununla beraber yönlendirilen URL'in uygulamaya geri gönderilmesi işlemlerini yapıyor.
  - Kimlik sağlayıcının cevabı ile beraber, kullanıcının tarayıcısı uygulamaya geri dönen yönlendirilmiş URL için istek yapıyor.
  - Uygulama kimlik sağlayıcının cevabını deşifre ediyor ve gereğince işi sürdürüyor.
  - (Sadece OAuth için) Uygulama, kimlik sağlayıcının servisine kullanıcı yerine direkt erişim sağlamak için cevabın içinde bulunan access token'ı kullanabilir.
En önemli farklılıkları OpenID'de kimlik doğrulama için kullanım gereklilikleri, kimlik sağlayıcının cevabı kimliğin beyanı; OAuth kullanım gerekliliğinde ise, kimlik sağlayıcı aynı zamanda bir API sağlayıcı ve kimlik sağlayıcının cevabı, kullanıcı yerine kimlik sağlayıcının bazı API 'lerine uygulamada halen devam eden erişimi verebilecek bir access tokendir. Access token uygulamanın, kimlik sağlayıcısına isteklerinde ekleyebileceği bir cüzdan anahtarı("valet key") olarak davranır. Bu ise kullanıcının API 'lere erişim için izni olduğunu kanıtlar.
Kimlik sağlayıcı genellikle (ama her zaman değil) kullanıcının kimlik doğruluğunu OAuth için access token verme işleminin bir parçası olarak ispatlıyor, bu da başarılı bir OAuth token erişim isteğini ayrı bir kimlik doğrulama metodu olabileceğini gösteriyor. Yine de OAuth bu kullanım senaryosu ile tasarlanmadığı için, böyle bir varsayımda bulunmak büyük güvenlik açıklarına sebep olabilir.


## Karşıtlık.
Temmuz 2012'de OAuh 2.0'daki baş yazar rolünden ayrılarak, IETF'deki çalışma grubundan da çekilip, ismini bu spesifikasyondan çıkardı. Hammer web ve kurumsal kültürler arasındaki bir çelişkinin üzerinde durarak, IETF'yi "tamamen kurumsal kullanım senaryoları" adı altında bir topluluk olduğunu anmıştır, bu "sadeliğe yeteneği yok" demektir. Hammer, Şu an sunulanın yetki verme protokolü için bir taslak olduğunu söylemiş ve "bu kurumsal bir yoldur", ekleyerek devam etmiştir "Danışmanlık servisleri ve entegrasyon çözümlerini satmak için yepyeni sınırdır."
OAuth 2.0 ve 1.0 karşılaştırılırken Hammer "daha karışık, daha az birlikte çalışabilir, daha kullanışsız, daha tamamlanmamış ve en önemlisi daha güvensiz" hale geldiğine parmak basıyor. Hammer, mimari değişimlerin 2.0 versiyonu için kullanıcılardan tokenlerin bağını kopardığını, bütün imzalama ve şifrelemenin protokol seviyesinde kaldırıldığını ve yetkilendirme işlemlerini zorlaştırmadan tokenler iptal edilmeyeceğinden dolayı sona erme süresi olan tokenlerin eklendiğini açıklıyor. Spesifikasyonda birçok öğe açıkça belirtilmemiş ve sınırlanmamış çünkü "bu çalışma grubunun doğası gereği, hiçbir konu tutulacak kadar ya da her bir uygulamada karar verilmesi için açık bırakılacak kadar küçük/önemsiz değildir."
Hammer daha sonra &Yet için kendi görüşlerini detaylandıran bir sunum veriyor.
David Recordon da daha sonradan kendi ismini spesifikasyonlardan belirli olmayan nedenlerden dolayı çıkarıyor. Dick Hardt editör olarak yerine devam ediyor ve framework Ekim 2012'de yayımlanıyor.