Açık ve gizli istemciler arasındaki farklar nelerdir?
Bu makale, OAuth'ta açık ve gizli istemciler arasındaki farkları, Logto uygulamaları örnekleriyle açıklar.
Logto kullanarak bir uygulama oluşturduğunuzda, Sezgisel olarak, adından da anlaşılacağı gibi, Yerel Uygulamanın genellikle telefon gibi cihazlarda bulunan işletim sistemlerinde çalıştığı açıklık kazanmaktadır. Ancak, SPA ve Geleneksel Web Uygulaması tam olarak nedir? Neden bu farklı uygulama türlerini ayırt etmemiz gerekiyor? Bu makale bu soruların cevaplarını ortaya koyacaktır.
Başlamadan önce, bazı kavramlara kısa bir giriş yapmak zorundayız.
OAuth nedir?
OAuth, genellikle internet kullanıcılarının diğer web sitelerindeki bilgilerine, şifrelerini vermeden erişim izni vermeleri için bir yol olarak kullanılan açık bir erişim yetkilendirme standardıdır.
Son on yılda, bu süreç kademeli olarak standart bir yetkilendirme süreci haline gelmiş ve Google, Meta, Microsoft gibi çoğu şirket tarafından geniş bir kabul görmüştür. Şu anda kullanılan sürümü OAuth 2.0'dır.
OAuth bağlamında, daha önce bahsettiğimiz uygulama İstemci olarak adlandırılır. Kaynak sahibinin (genellikle son kullanıcıların) yetkilendirmesini elde ettiklerinde, korunan kaynaklar için taleplerde bulunabilirler.
Açık istemciler ve gizli istemciler
OAuth, istemci kimlik bilgilerinin güvenliğini sağlayabilme yeteneklerine bağlı olarak iki istemci türünü tanımlar.
Gizli istemci
Kimlik bilgilerinin gizliliğini sağlayabilen bir istemci (örneğin, istemci kimlik bilgilerine sınırlı erişimi olan güvenli bir sunucuda uygulanan bir istemci) veya başka yollarla güvenli istemci kimlik doğrulaması yapabilen bir istemci.
Açık istemci
Kimlik bilgilerinin gizliliğini sağlayamayan bir istemci (örneğin, kaynak sahibinin cihazında çalışan bir yerel uygulama veya web tabanlı bir uygulama) ve başka yollarla istemci olarak güvenli bir şekilde kimlik doğrulaması yapamayan bir istemci.
SPA, yerel uygulama ve geleneksel web uygulaması
Yukarıda verilen temel bilgilerle, Logto bağlamında SPA, Yerel Uygulama ve Geleneksel Web Uygulaması'nın ne anlama geldiğine, ayrıca bunların açık veya gizli istemciler olarak kabul edilip edilmediklerine bir göz atalım.
SPA
Bir SPA'nın istemci tarafı kodu bir web sunucusundan indirilir ve kaynak sahibinin cihazındaki kullanıcı aracısında (bir web tarayıcısı gibi) yürütülür. Protokol verileri ve kimlik bilgilerinin kaynak sahibine kolayca erişilebilir (ve genellikle görünür) hale gelir.
Yerel uygulama
Bir yerel uygulama, kaynak sahibinin cihazına yüklenir ve çalıştırılır. Protokol verileri ve kimlik bilgileri kaynak sahibine erişilebilirdir. Genellikle uygulama içerisindeki herhangi bir istemci kimlik doğrulama bilgisinin çıkarılabileceği varsayılır.
Geleneksel web uygulaması
Geleneksel bir web uygulaması, bir web sunucusu üzerinde çalışan bir istemcidir. Kaynak sahibi, istemciye, cihazındaki kullanıcı aracısında sunulan bir HTML kullanıcı arayüzü aracılığıyla erişir. İstemci kimlik bilgileri ve istemciye verilen erişim belirteçleri, web sunucusunda saklanır ve kaynak sahibine gösterilmez veya erişilebilir değildir.
Bu nedenle, SPA ve yerel uygulamanın açık istemciler olduğunu, geleneksel web uygulamasının ise gizli bir istemci olduğunu açıkça görebiliriz.
Logto'da bir SPA veya yerel uygulama oluşturduğunuzda bir Uygulama sırrı bulunmadığını, ancak bir geleneksel web uygulamasının hem bir Uygulama Kimliği hem de bir Uygulama sırrına sahip olduğunu fark edebilirsiniz. Bunun nedeni, bir açık istemcinin sırrının güvenliğinin garanti edilememesidir.
Bir istemci OAuth yetkilendirme akışında nasıl çalışır?
OAuth uygulamaları geliştirirken ilk adım, istemciyi OAuth hizmet sağlayıcısı ile kaydetmektir. İstemci kaydı, uygulamanın adı ve Yönlendirme URI'si gibi bilgilerin sağlanmasını içerir. Daha sonra, OAuth hizmet sağlayıcısı bir istemci kimliği ve istemci sırrı oluşturur, bunlar uygulamanın kimlik bilgileri olarak kabul edilir.
İstemci kimliği, genel bilgi olarak kabul edilir ve OAuth süreci sırasında kullanıcı ile paylaşılır. Genellikle yetkilendirme URL'sine dahil edilir ve son kullanıcılar tarafından görünür.
Öte yandan, istemci sırrı uygulamanın şifresi olarak hizmet eder ve gizli tutulmalıdır. OAuth sürecinde, erişim belirtecini elde etmek için yetkilendirme kodunun değiş tokuş edilmesinde (yetkilendirme kodu akışı varsayılarak) kullanılır. İstemci sırlarının varlığı, yalnızca kayıtlı uygulamaların erişim belirteçlerinin değişimini tamamlayabilmesini sağlar.
Kod Değişimi İçin Kanıt Anahtarını Tanıtma (PKCE)
Daha önce belirtildiği gibi, açık istemcilerin istemci sırları güvenli olduğundan emin olunamaz ve saldırganlar istemci kimlik bilgilerini elde edebilir ve istemcilerin kimliğine bürünerek korunan kaynaklara erişebilirler, bu durum herhangi bir durumda kabul edilemez.
PKCE (Kod Değişimi İçin Kanıt Anahtarı), her yetkilendirme akışının başında geçici olarak yerel olarak saklanan bir kod doğrulayıcısı üreterek ve bir kod meydan okuması üretmek için hashlayarak bu sorunu çözer ve bu meydan okuma yetkilendirme sunucusuna gönderilir. Kod doğrulayıcı, erişim belirtecinin değiştirilmesinde yetkilendirme sunucusuna yeniden gönderilir. Yetkilendirme sunucusu, kod doğrulayıcı ve kod meydan okumasının eşleştiğini doğrular, bu da açık istemcinin kimliğine bürünülmediğini garanti eder.
PKCE'deki kod doğrulayıcı, aslında dinamik bir istemci sırrı gibi işlev görür. Güvenliği, hash algoritmasının geri döndürülemezliği ile sağlanır.
Özet
Bu makalede, OAuth'ta gizli istemciler ve açık istemciler kavramlarını tartıştık. Gizli istemcilerin, sırları saklama ve hassas bilgileri güvenli bir şekilde saklama yeteneğine sahip olduğunu, açık istemcilerin ise bu yeteneğe sahip olmadığını öğrendik. Logto'nun ürün uygulamalarında geleneksel web uygulamaları, SPA'ler ve yerel uygulamalar gibi iki tür istemci örneklerini inceledik.
Ayrıca, OAuth'ta istemci kayıt sürecini ve istemci kimliği ile istemci sırrının rollerini tartıştık.
Bunun yanı sıra, açık istemcilerin istemci sırlarını güvenli bir şekilde saklama konusunda kısıtlamalarla karşılaştıklarını bulduk. Bu sınırlamayı aşmak için, istemci sırrına ihtiyaç duymadan yetkilendirme kodlarını güvenli bir şekilde değiş tokuş etmelerini sağlayan, OAuth uzantısı PKCE'yi (Kod Değişimi için Kanıt Anahtarı) tanıttık.
Ürünümüz Logto, OAuth ve OIDC protokollerinin en iyi uygulamalarını takip ederek her aşamada güvenliği sağlamak için tam bir CIAM çözümüdür; PKCE kullanarak açık istemcilerin güvenliğini koruma kullanımı da dahil.