İnternet tabanlı sistemlerde kullanıcı verilerine güvenli ve kontrollü erişim sağlamak amacıyla çeşitli yetkilendirme protokolleri kullanılmaktadır. Bu protokoller, kullanıcı kimlik bilgilerini doğrudan paylaşmadan üçüncü taraf uygulamaların belirli kaynaklara erişimini mümkün kılar. OAuth 2.0, bu amaçla geliştirilen yetkilendirme protokolüdür.
OAuth 2.0 bir yetkilendirme (authorization) protokolüdür, kimlik doğrulama (authentication) protokolü değildir. Bu ayrım önemlidir; çünkü OAuth 2.0, kullanıcı kimliğini doğrulamak yerine, belirli kaynaklara erişim yetkisi vermeye odaklanır. İnternet güvenliği ve kullanıcı veri gizliliği açısından büyük önem taşır. Modern web uygulamalarının çoğunda yaygın olarak kullanılmaktadır.
Tarihçe
OAuth protokolü ilk olarak 2006 yılında geliştirilmeye başlanmış ve 2012 yılında IETF (Internet Engineering Task Force) tarafından RFC 6749 numarasıyla resmî bir standart hâline getirilmiştir. OAuth 2.0, önceki sürüm olan OAuth 1.0'a göre daha esnek, genişletilebilir ve kullanım açısından daha kolaydır.
Temel Bileşenler
OAuth 2.0 protokolü dört ana bileşenden oluşur: kaynak sahibi (kullanıcı), istemci (uygulama), yetkilendirme sunucusu ve kaynak sunucusu. Bu bileşenler arasındaki etkileşim, erişim jetonları aracılığıyla gerçekleşir. Protokol, farklı erişim senaryoları için "authorization code", "implicit", "resource owner password credentials" ve "client credentials" olmak üzere dört ana yetkilendirme türünü destekler. Ayrıca, Google, Facebook, Microsoft gibi büyük teknoloji şirketleri bu temel protokol üzerine kendi güvenlik ve kullanıcı deneyimi ihtiyaçlarına göre özel OAuth 2.0 implementasyonlarını geliştirmiştir. Bu uygulamalar, standart protokole ek güvenlik katmanları ve kimlik doğrulama özellikleri ekleyerek OAuth 2.0'ı daha işlevsel hâle getirmektedir.
Authorization Code Flow
Authorization Code Flow, OAuth 2.0 protokolünün en yaygın ve güvenli yetkilendirme türlerinden biridir. Bu akış, özellikle sunucu tarafında çalışan web uygulamaları için tasarlanmıştır. Süreç şu adımlarla işler:
- Yönlendirme ve İzin İstemi: Kullanıcı, uygulama tarafından yetkilendirme sunucusuna yönlendirilir. Yetkilendirme sunucusu, kullanıcının kimliğini doğrular ve uygulamanın erişim izni isteğini kullanıcıya gösterir. Kullanıcı izni verdiğinde süreç devam eder.
- Yetkilendirme Kodunun Alınması: Kullanıcının izni sonrası, yetkilendirme sunucusu istemci uygulamaya kısa süreli bir "yetkilendirme kodu" gönderir. Bu kod genellikle bir yönlendirme URI'si aracılığıyla iletilir.
- Erişim Jetonunun Alınması: Uygulama, aldığı yetkilendirme kodunu kullanarak yetkilendirme sunucusuna bir arka kanal (sunucu-sunucu) isteği yapar. Bu istekte istemci kimlik bilgileri de gönderilir. Sunucu, geçerli bir kod ve istemci doğrulaması alırsa, uygulamaya erişim jetonu (access token) gönderir. Gerekiyorsa, uzun vadeli oturumlar için bir yenileme jetonu (refresh token) de sağlanabilir.
- Korunan Kaynaklara Erişim: Uygulama, erişim jetonunu kullanarak kaynak sunucudan kullanıcı adına veri talep edebilir. Erişim jetonunun geçerlilik süresi ve kapsamı, önceden belirlenen yetkilere göre sınırlıdır.
Authorization Code Flow (auth0.com)
Authorization Code Flow'un temel avantajı, erişim jetonlarının istemcinin tarayıcısına doğrudan iletilmemesi ve bunun yerine sunucu tarafında güvenli bir şekilde alınmasıdır. Bu yapı, kimlik bilgileri ve erişim verilerinin sızma riskini önemli ölçüde azaltır.
OpenID Connect
OpenID Connect, OAuth 2.0 protokolü üzerine inşa edilmiş, kullanıcı kimliğinin doğrulanmasına odaklanan bir kimlik doğrulama (authentication) protokolüdür. OAuth 2.0 yalnızca yetkilendirme sağlarken, OpenID Connect bu protokole ek katmanlar ekleyerek kullanıcı kimliğinin güvenli ve standart bir şekilde doğrulanmasını mümkün kılar. OpenID Connect, JSON Web Token (JWT) formatında ID tokenları kullanarak kullanıcı hakkında kimlik bilgilerini taşır ve farklı uygulamalar arasında tek oturum açma (Single Sign-On) deneyimi sağlar. Günümüzde birçok büyük teknoloji firması ve servis, OpenID Connect standardını kimlik doğrulama için tercih etmektedir.
OpenID Ayarları
OpenID Connect standardı, kimlik doğrulama ve yetkilendirme süreçlerini kolaylaştırmak amacıyla .well-known/openid-configuration adında standart bir endpoint tanımlar. Bu endpoint, yetkilendirme sunucusunun yapılandırma bilgilerini (örneğin, desteklenen yetkilendirme yöntemleri, token endpointleri, kullanıcı bilgisi endpointi gibi) JSON formatında sunar. İstemci uygulamalar bu endpoint'e başvurarak, yetkilendirme sunucusunun desteklediği protokol özellikleri ve URL’ler hakkında dinamik ve güvenilir bilgi edinir. Bu sayede, uygulamalar farklı yetkilendirme sunucularına kolayca uyum sağlayabilir ve yapılandırma süreçleri otomatikleşir. Örnek olarak Google'ın openid-configuration endpoint'ine bakabilirsiniz.
Kullanım Alanları
OAuth 2.0, sosyal medya hesaplarıyla giriş, üçüncü taraf uygulamaların takvim, e-posta veya dosya gibi servislere erişimi gibi pek çok kullanım alanına sahiptir. Google, Facebook, Microsoft gibi büyük teknoloji firmaları bu protokolü yaygın şekilde kullanmaktadır.
Güvenlik ve Eleştiriler
OAuth 2.0, güvenliğin sağlanması için HTTPS gibi güvenli iletişim protokollerinin kullanılmasını zorunlu kılar. Ancak, uygulamanın kötü yapılandırılması durumunda güvenlik açıkları doğabilir. Ayrıca bazı uzmanlar, OAuth 2.0'ın esnekliği nedeniyle karmaşık güvenlik gereksinimlerini uygulamada zorluklar yaşanabileceğini belirtmektedir.