OAuth 2.0 protokolü ile ilgili bir önceki yazıda OAuth 2.0 rollerini incelemiştik. Bu rollerden Application Client rölü, veri kaynağına erişmek amacıyla yetkilendirilen bir uygulamadır. Bu uygulama OAuth için kısaca Client şeklinde de adlandırılabilir. Veri kaynağına erişmek isteyen uygulamalar Mobil, Web Site, Jvascript/SPA (Single Page Applicaiton) veya Desktop şeklinde bir birinden farklı yapıda olabilmektedir. Altyapı ve işleyiş açısından farklılık arz eden bu uygulamalar için OAuth 2.0 protokolünde özel türler ve profiller belirlenmiştir.
Client Types (Client Türleri)
OAuth 2.0 protokolü için iki tür client tanımlanmıştır.
- Confidential (Gizli)
- Public (Açık)
Confidential Client kendi kimlik gizliliğini muhafaza edebilen yapıdaki uygulamalardır. Uygulama güvenli bir sunucu üzerinde barındırılır. Kimlik bilgileri Authorization Server tarafından önceden alınır ve uygulamaya kaydedilir verilir. Buna örnek olarak bir web site uygulamasını verebiliriz. Sunucuya yönetici haricinde kimse erişip client şifrelerine ulaşamaz.
Public Client kendi kimlik bilgilerini üzerinde güvenli bir şekilde muhafaza edemeyen uygulamalardır. Örneğin mobil, desktop uygulamaları üzerinde şifrelerin tutulması sakıncalıdır. Uygulamanın kodları bir şekilde kırıldığında kimlik bilgileriniz dolandırıcıların eline geçebilir. Benzer şekilde Javascript uygulamalarında kimlik bilgilerinin tutulması, tarayıcıda kaynağın görüntülenmesiyle ulaşılabilir olduğundan dolayı sakıncalıdır.
Client Profiles (Client Profilleri)
Client uygulamalar için OAuh 2.0 protokolünde üç farklı profili belirlenmiştir.
Bu profil bilgileri uygulama altyapısına göre belirlenmiş olup platform bağımsızdır.
Web Application
Web Application profiline sahip uygulamalar sunucu üzerinde çalışan uygulamalardır. Bu tür uygulamalarda sunucu(server) ve istemci(client) şeklinde iki taraf vardır. Sunucu, web sayfasını oluşturan(render eden) taraftır. İstemci ise internet tarayıcısında web sayfasını görüntüleyen taraftır. Örneğin asp.net web forms, asp.net mvc uygulaması veya java jsf uygulaması gibi uygulamalardır.
Bu tür uygulamalar Confidential Client uygulama türündedir. Web Application profilindeki uygulamaların sunucu tarafı admin yetkisinde bulunduğundan bu kısıma üçüncü şahısların dışarıdan erişmesi söz konusu değildir. Eğer bir Web Application üzerinden bir Reource Server’a erişmek isteniyorsa uygulamaya(client) ait kimli bilgileri (id, şifre gibi) sunucu üzerinde tutulur. Böylece kimlik bilgileri gizlenmiş olur.
User Agent
User Agent profilindeki uygulamalar tamamen internet tarayıcısı üzerinde çalışan uygulamalarıdır. User Agent uygulamaları da Web uygulamaları gibi sunucu üzerinde barındırılır. Ancak uygulama, internet tarayıcısına bir kez indirilir ve indirildikten sonra tarayıcı üzerinde çalışmaya başlar. Kaynak (Resource Server) üzerinden ihtiyaç duyulan veriler http, https veya ws gibi protokoller üzerinden talep edilir.
Günümüzde User Agent uygulamalarına en iyi örnek javascript uygulamalarıdır. Bir kaç yıl öncesine kadar Java Flex, Microsoft Silverlight ve Adobe Flash uygulamlar da User Agent açısından önemli bir yere sahipti. Fakat bu tür uygulamaların çalışması için platform bağımlılığını gerektiren bir takım ek yazılımlar gerektiğinden ve mobil cihazlarda uyum sorunu ortaya çıktığından dolayı artık bunların yerine Javascript tercih edilmektedir.
Bu tür uygulamalar Public Client uygulama türündedir. User Agent profilindeki uygulamaların kaynağı internet tarayıcısından görüntülenebildiği için bu uygulamalar üzerinde kullanıcı adı veya şifre gibi kimlik bilgileri muhafaza edilmez.
Native
Native profilindeki uygulamalar, kişisel bilgisayarlar ve mobil cihazlar üzerinde çalışan uygulamalardır. Örneğin Desktop, Android, iOS, Windows Mobile gibi uygulamalar Native profilli uygulamalardır. Bu tür uygulamalar doğrudan cihazlara yüklenerek çalışırlar.
Native uygulamalar Public Client uygulama türündedir. Kişisel cihazlara erişim açık olduğundan dolayı uygulamaların kodlarının kırılması durumunda uygulama kimlik bilgilerine erişmek mümkündür.