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 third party web sitelerine erişmek için kullanılır.[1] 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.[2]
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.
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.[3]
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.[4]
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;[5] Ekim 2012 de ana framework yayımlanıyor.(Eran Hammer'a göre 2010 sonunda bitirilmesi bekleniyordu.[6] Fakat OAuth hakkındaki çelişen incelemeler nedeniyle Hammer çalışma grubundan ayrıldı.[7])
Facebook Graph API sadece OAuth 2.0 protokolünü destekliyor.[8] Google bütün API'leri için kimlik doğrulama mekanizması olarak önerilen OAuth 2.0'ı destekliyor.[9] 2011'den bu yana da Microsoft[10] API'leri için OAuth 2.0'ı deneysel olarak desteklemeye başladı.
Ekim 2012 de OAuth 2.0 Framework [11] and Bearer Token Usage[12] 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.[13] Bu sebeple OAuth Core protokolü bu sorunu ortadan kaldırmak üzere görevlendiriliyor.[14]
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.[15][16]
OAuth 2.0 da uygulamaların maruz kaldığı birçok güvenlik açığı vardı.[17] 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.[18][19]
Ocak 2013'te IETF OAuth 2.0 için birkaç tane tehdit modelleri tanımladı.[20] Bunların arasından biri "Open Redirector"; 2014 baharında, Wang Jing tarafından "Covert Redirect" adı altında tanıtıldı.[21][22][23][24]
Muhtemelen OAuth'daki en yıkıcı güvenlik açığı yemleme zafiyeti oldu :[25] 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.[26]
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.[27]
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."[7]
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."[7]
Hammer daha sonra &Yet için kendi görüşlerini detaylandıran bir sunum veriyor.[28]
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.[11]
Ayrıca bakınız
- List of OAuth providers
- OpenID
- DataPortability
- Mozilla Persona
- SAML
- User-Managed Access
Kaynakça
- "Arşivlenmiş kopya". 24 Nisan 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.
- [[rfc:6749|http://tools.ietf.org/html/rfc6749 14 Mayıs 2016 tarihinde Wayback Machine sitesinde arşivlendi.]]
- "OAuth Core 1.0". 4 Aralık 2007. 25 Kasım 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Ekim 2014.
- Chris Crum (31 Ağustos 2010). "Twitter Apps Go OAuth Today". WebProNews.com. 4 Eylül 2010 tarihinde kaynağından arşivlendi. Erişim tarihi: 14 Mart 2011.
- "Web Authorization Protocol (oauth)". IETF. 2 Temmuz 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mayıs 2013.
- Eran Hammer (15 Mayıs 2010). "Introducing OAuth 2.0". 29 Mart 2014 tarihinde kaynağından arşivlendi. Erişim tarihi: 14 Mart 2011.
- "OAuth 2.0 and the Road to Hell". Eran Hammer. 28 Temmuz 2012. 9 Ağustos 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 16 Ağustos 2012.
- "Authentication - Facebook Developers". developers.facebook.com. 7 Ağustos 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.
- "Google Accounts Authentication and Authorization". developers.google.com. 25 Mart 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.
- Dare Obasanjo (4 Mayıs 2011). "Announcing Support for OAuth 2.0". windowsteamblog.com. 20 Ağustos 2012 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.
- "RFC6749 - The OAuth 2.0 Authorization Framework". Dick Hardt. Ekim 2012. 14 Mayıs 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Ekim 2012.
- "RFC6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage". Michael Jones, Dick Hardt. Ekim 2012. 1 Aralık 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Ekim 2012.
- "OAuth Security Advisory: 2009.1". 23 Nisan 2009. 27 Mayıs 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 23 Nisan 2009.
- "OAuth Core 1.0a". 30 Haziran 2009 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.
- "Is OAuth 2.0 Bad for the Web?". 20 Eylül 2010. 14 Mart 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 21 Eylül 2010.
- "an unwarranted bashing of Twitter's oAuth". 3 Ağustos 2011. 17 Mayıs 2013 tarihinde kaynağından arşivlendi. Erişim tarihi: 3 Ağustos 2011.
- "Hacking Facebook with OAuth 2.0 and Chrome". 12 Şubat 2013. 23 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Mart 2013.
- "Re: OAUTH-WG OAuth2 attack surface..." 28 Şubat 2013. 21 Mayıs 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Mart 2013.
- "OAuth1, OAuth2, OAuth...?". 1 Mart 2013. 30 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 6 Mart 2013.
- OAuth 2.0 Threat Model and Security Considerations.
- "OAuth Security Advisory: 2014.1 "Covert Redirect"". OAuth. 4 Mayıs 2014. 21 Kasım 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Kasım 2014.
- "Serious security flaw in OAuth, OpenID discovered". CNET. 2 Mayıs 2014. 2 Kasım 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Kasım 2014.
- "Math student detects OAuth, OpenID security vulnerability". Phys.org. 3 Mayıs 2014. 6 Kasım 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 11 Kasım 2014.
- "Covert Redirect". Tetraph. 1 Mayıs 2014. 10 Mart 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 10 Kasım 2014.
- Dick Hardt, ed.
- "End User Authentication with OAuth 2.0". OAuth Community Site. 19 Kasım 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 8 Mart 2016.
- "OAuth 2.0 - Looking Back and Moving On". Eran Hammer. 23 Ekim 2012. 25 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 22 Kasım 2012.
Dış bağlantılar
- The OAuth 1.0 Protocol (RFC 5849)
- The OAuth 2.0 Authorization Framework (RFC 6749)
- The OAuth 2.0 Authorization Framework: Bearer Token Usage (RFC 6750)
- "OAuth.net". 4 Aralık 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.
- "OAuth Working Group's Mailing List". 21 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.
- "OAuth Code Library Support". on Google Groups
- "OAuth Beginner's Guide and Resource Center". Hueniverse. 27 Kasım 2015 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.Hueniverse.
- "Google OAuth & Federated Login Research". 8 Mart 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.
- "Yahoo! OAuth Quick Start Guide". 30 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016..
- "LIVE Demo of OAuth with Google, Yahoo". 26 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.
- "oAuth Live demo and get php source code from github". 20 Nisan 2016 tarihinde kaynağından arşivlendi. Erişim tarihi: 9 Nisan 2016.
- oAuth End points cheat sheet