Türkçe
  • oauth
  • örtük akış
  • yetkilendirme kodu
  • PKCE

Örtük Akış vs. Yetkilendirme Kodu Akışı: Neden örtük akış artık ölü?

OAuth 2.0'de "Yetkilendirme kodu akışı" varken neden "Örtük akış" var? Bu iki yetki türünün detaylarına dalalım ve neden örtük akışı kullanmaktan kaçınmanız gerektiğini öğrenelim.

Darcy Ye
Darcy Ye
Developer

Yetkilendirme kodu akışı ve Örtük akış, OAuth 2.0'da yaygın olarak kullanılan iki yetkilendirme türüdür, web uygulamaları için güvenli ve etkili kullanıcı yetkilendirmesi sağlarlar. Her iki akış da kullanıcıların kimlik bilgilerini doğrudan açığa çıkarmadan uygulamalara erişim izni vermelerini sağlayan bir yetkilendirme süreci uygular. Örtük akış, başlangıçta tarayıcı sınırlamalarını ele almak için geliştirilmişti, ancak modern web teknolojilerinin ortaya çıkmasıyla Yetkilendirme kodu akışı, geliştirilmiş güvenlik özellikleri nedeniyle birçok geliştirici için tercih edilen bir seçenek haline gelmiştir.

Bu makalede, bu iki yetki türü arasındaki farkları keşfedeceğiz ve neden Yetkilendirme kodu akışını tercih edip örtük akışı kullanmaktan kaçınmanız gerektiğini açıklayacağız.

OAuth 2.0 nedir?

Bu iki yetki türünün detaylarına dalmadan önce, OAuth 2.0'ın ne olduğunu ve modern web uygulamaları için neden önemli olduğunu anlayalım.

İnsanlar OAuth'tan bahsettiğinde, genellikle web sitelerinin veya uygulamaların bir kullanıcının adına diğer web servislerinin kaynaklarını kullanmasına imkan tanıyan yerleşik bir protokol olan OAuth 2.0'ı kastediyoruz. 2012'de OAuth 1.0'ın yerini almış ve o zamandan beri dijital yetkilendirme için geniş çapta kabul edilen standart haline gelmiştir. OAuth 2.0, kullanıcıların kimlik bilgilerini açıklamadan kullanıcıları temsil eden kaynaklarla etkileşimde bulunmak için istemci uygulamasına belirli izinler vererek kontrollü erişim sağlamak için tasarlanmıştır.

Temelde web ortamlarında kullanılsa da, OAuth 2.0'ın çerçevesi çeşitli istemci biçimlerine de genişler. Bu, tarayıcı tabanlı uygulamaları, sunucu tabanlı web uygulamalarını, yerel veya mobil uygulamaları ve hatta birbirine bağlı cihazları kapsamaktadır ve bu platformlar arasında yetki verilmiş erişimin nasıl yönetileceğine dair bir yaklaşımı detaylandırır. İstemci uygulaması, kullanıcı ve yetki sunucusu arasında yetkilendirme sürecini tanımlamak için "yetkilendirme türlerini" tanıtır. Bu yetki türleri, istemci uygulamasının bir erişim belirteci elde ederek kullanıcının kaynaklarına nasıl erişebileceğini belirlemek için kullanılır. OAuth 2.0'da en yaygın yetkilendirme türleri şunlardır:

  • Yetkilendirme kodu: Tüm uygulama türleri, özellikle erişim belirteci için bir yetkilendirme kodunu değiştirebilen ve belirteçleri güvenli bir şekilde yönetebilen sunucu tabanlı web uygulamaları için idealdir.
  • Örtük: Tarayıcı tabanlı uygulamalar, güvenli olmayan bir sunucu bileşeni ile tasarlanan basitleştirilmiş bir akış. İstemci uygulamalarına hızla belirteç sağlamak için oluşturulmuştur. Ancak artık güvenlik endişeleri nedeniyle büyük ölçüde kullanılmamaktadır.
  • Kaynak sahibi parola kimlik bilgileri: Bu tür, istemci uygulamasının kullanıcının kimlik bilgilerini (kullanıcı adı ve şifre) göndererek doğrudan bir erişim belirteci talep edip almasına olanak tanır. İstemci uygulamasının kullanıcının kimlik bilgilerine doğrudan erişimi olduğundan, bu yetkilendirme türü de kullanılmamaktadır ve her durumda kaçınılmalıdır.
  • İstemci kimlik bilgileri: Makineden makineye iletişimde kullanılır ve uygulama, istemcidir. Uygulamanın kendi kaynaklarını veya başka bir servisin kaynaklarını elde etmek için yetki sunucusuyla kimlik doğrulaması yapmasını ve bir erişim belirteci talep etmesini içerir.

Örtük akış nedir?

Örtük akış, erişim belirtecinin bir yetki kodu ile değiştirileceği ek bir adım olmaksızın doğrudan istemciye yönlendirme URI'sinde döndüğü basit bir OAuth 2.0 akışıdır. Başlangıçta, tarayıcı kısıtlamaları nedeniyle belirteç uç noktasına sunucu tabanlı istekler yapamayan web uygulamaları için tasarlandı.

Örtük akış nasıl çalışır?

  1. Kullanıcı, kimlik doğrulama sürecini başlatmak için istemci uygulamasında bir butona veya bağlantıya tıklar.
  2. İstemci uygulama, erişim kapsamını da içeren bilgilerle kullanıcının yetki sunucusuna kimlik doğrulaması yapması için yönlendirir.
  3. Yetki sunucusu, kullanıcıların giriş yapmasını ve istemci uygulamasına izin vermesini ister.
  4. Başarılı bir kimlik doğrulama ve yetkilendirme durumunda, yetki sunucusu erişim belirteci ile kullanıcı tarayıcısını istemcinin belirtilen yönlendirme URI'sine geri yönlendirir.
  5. İstemci uygulama URL parçasından erişim belirtecini alır ve kaynak sunucusundaki kullanıcının kaynaklarına erişmek için kullanır.

Örtük akışla ilgili güvenlik riskleri

Örtük akışın birkaç güvenlik açığı vardır:

  • Belirteç ifşası: Erişim belirteci URL parçasında doğrudan istemciye döndürüldüğünde, bu, kötü niyetli taraflarca kolayca ele geçirilebilir. Bu durum, erişim belirtecinin potansiyel hırsızlık ve kötüye kullanımına maruz kalmasına neden olur.
  • CSRF saldırıları: Örtük akış, kötü niyetli web sitelerinin kullanıcıları hesaplarına yetkilendirilmemiş erişim vermeye kandırabileceği Çapraz Site İstek Sahteciliği (CSRF) saldırılarına karşı savunmasızdır.

Bu güvenlik endişeleri nedeniyle, örtük akış modern web uygulamaları için artık önerilmemektedir. Bunun yerine, PKCE (Yetki Kodu Değişimi İçin Kanıt Anahtarı) ile birlikte yetkilendirme kodu akışı, güvenli kullanıcı yetkilendirme için tercih edilen seçenektir.

Yetkilendirme kodu akışı nedir?

Yetkilendirme kodu akışı ise, yetkilendirme sürecini iki aşamaya ayıran daha güvenli bir OAuth 2.0 akışıdır: istemci uygulama önce yetki sunucusundan bir yetki kodu alır, ardından bu kodu bir erişim belirteci için değiştirir. Bu akış, istemci kimlik bilgilerini güvenli bir şekilde depolayabilen ve erişim belirteçlerini yönetebilen sunucu tabanlı web uygulamaları için başlangıçta tasarlanmıştır. PKCE uzantısının tanıtılmasıyla, yetkilendirme kodu akışı tarayıcı tabanlı uygulamalarda da kullanılabilir hale gelmiştir.

Sunucu tabanlı bileşenli özel istemciler için yetkilendirme kodu akışı nasıl çalışır?

  1. Kullanıcı, kimlik doğrulama sürecini başlatmak için istemci uygulamasında bir butona veya bağlantıya tıklar.
  2. İstemci uygulama, istenen erişim kapsamı ile kullanıcıyı yetki sunucusuna kimlik doğrulamak için yönlendirir.
  3. Yetki sunucusu, kullanıcıların giriş yapmasını ve istemci uygulamasına izin vermesini ister.
  4. Başarılı bir kimlik doğrulama ve yetkilendirme durumunda, yetki sunucusu istemciye bir yetki kodu döner.
  5. İstemci uygulama, sunucu kimlik bilgilerini kullanarak belirteç uç noktasına bir sunucudan sunucuya istek yaparak yetki kodunu bir erişim belirteci ile güvenli bir şekilde değiştirir.
  6. Yetki sunucusu, yetki kodunu ve istemci kimlik bilgilerini doğrular ve istemciye bir erişim belirteci döner.
  7. İstemci uygulama, erişim belirtecini kullanarak kaynak sunucusundaki kullanıcının kaynaklarına erişir.

PKCE ile genel istemciler için yetkilendirme kodu akışı nasıl çalışır?

  1. Kullanıcı, kimlik doğrulama sürecini başlatmak için istemci uygulamasında bir butona veya bağlantıya tıklar.
  2. İstemci uygulama bir kod doğrulayıcı ve bir kod meydan okuması oluşturur.
  3. İstemci uygulama kullanıcıyı kod meydan okuması ile yetki sunucusuna kimlik doğrulamak için yönlendirir.
  4. Yetki sunucusu, kod meydan okumasını daha sonra doğrulama için saklar.
  5. Kullanıcı kimlik doğrulaması yapar ve istemci uygulamasına erişim izni verir.
  6. Yetki sunucusu istemciye bir yetki kodu döner.
  7. İstemci uygulama, kod doğrulayıcıyı kullanarak belirteç uç noktasına bir sunucudan sunucuya istek yaparak yetki kodunu bir erişim belirteci ile değiştirir.
  8. Yetki sunucusu, saklanan kod meydan okumasına karşı yetki kodu ve kod doğrulayıcıyı doğrular.
  9. Yetki sunucusu istemciye bir erişim belirteci döner.
  10. İstemci uygulama, erişim belirtecini kullanarak kaynak sunucusundaki kullanıcının kaynaklarına erişir.

PKCE akışı hakkında daha fazla bilgi edinin.

Örtük akış vs. Yetkilendirme kodu akışı

KapsamYetkilendirme kodu akışıÖrtük akış
Belirteç teslimiErişim belirteci, istemciye güvenli bir istek yoluyla teslim edilirErişim belirteci, URL parçasında doğrudan istemciye teslim edilir
Güvenlik seviyesiYüksek (belirteçler tarayıcıda açığa çıkmaz)Düşük (belirteçler tarayıcıda açığa çıkar)
Kullanım durumuSunucu tabanlı web uygulamaları ve tarayıcı tabanlı uygulamalar (PKCE ile)Sadece tarayıcı tabanlı uygulamalar
Modern kullanımTüm uygulama türleri için önerilirArtık önerilmiyor ve kaçınılmalıdır

Yetkilendirme kodu akışı, örtük akışın güvenlik sorunlarını ortadan kaldırabilir mi?

Cevap EVET:

Yetkilendirme kodu akışı, bir erişim belirteci için yetki kodu değişimi yapma ek adımını tanıtır, bu da belirteç maruziyeti riskini önemli ölçüde azaltır.

  • Güvenli bir sunucu tabanlı bileşenli özel istemciler için, istemci uygulama yetki kodunu kullanarak bir erişim belirteci ile güvenli bir şekilde değiştirebilir.
  • Güvenli bir sunucu tabanlı bileşeni olmayan genel istemciler için, yetki kodu değişim sürecini korumak için PKCE uzantısı kullanılabilir.

Eğer işinizde örtük akış kullanıyorsanız, PKCE ile yetkilendirme kodu akışına geçmek, hem sizin hem de kullanıcılarınız için daha iyi bir güvenlik sağlayabilir. Kimlik sistemini taşımanın ve yönetmenin sıkıcı ve maliyetli olabileceğini anlıyoruz, ancak geliştirilmiş güvenlik ve uyum avantajları çabaya kesinlikle değer.