SSO (Single Sign-On) Nedir ?

Türkçe'ye "Tek Oturum Açma" olarak tercüme edilebilen SSO yani single sign-on, birbiriyle ilişkili fakat birbirinden bağımsız uygulamak için kullanılabilen çoklu erişim kontrolüdür. SSO tek bir kullanıcı ile oturum açarak çok sayıda uygulama/site’ye erişime olanak sağlar. SSO’nun merkezinde girişin kontrolünü yapacak olan SSO sunucusu yer alır. Kullanıcılar herhangi bir uygulama/site ye giriş yapmak istediklerinde bu SSO sunucusuna yönlendirilirler. Burada kullanıcılar giriş bilgileriyle sisteme giriş yaptıktan sonra bir Token oluşturulur ve SSO sunucusu kullanıcıyı bu Token ile birlikte giriş yapmış olduğu uygulamaya geri döndürür. Giriş yapılan uygulama kendisine gelen Tokenı kontrol eder ve eğer Token doğru ise kullanıcı çerezler yardımıyla uygulamaya giriş hakkına erişir. Bu kullanıcı farklı bir uygulamaya istek yaptığı zaman çerez ve Token kontrolü ile oturum açma işlemi gerçekleşmiş bir şekilde uygulamayı açacaktır.


simple sso

Bu sistemde uygulamaların kullanıcı bilgileri tek bir database’de birleştirilir. Bu birleşme sayesinde giriş yaparken kullanılan şifreleme algoritmaları tek bir algoritmaya iner. Bu sayede birçok farklı şifreleme algoritması kullanmak yerine tek bir algoritmayla bu sıkıntı çözülür. Ayrıca SSO Server olarak tanımlanan uygulamaya erişim engeli konularak başka uygulamalardan veya url lerden yapılacak istekler engellenerek bir güvenlik önlemi de alınmış olur. Bu sisteme tanımlanan uygulamalara izin verilip diğer uygulamalar engellenerek bir güvenlik katmanı oluşturulur.


SSO Senaryoları


SSO uygulanmadan yapılan giriş işlemleri şu şekilde işler. Kullanıcı “A“ uygulamasına giriş yapar ve bu uygulamaya ait olan çerez(cookie) tarayıcıda tutulur. Kullanıcı “B” uygulamasına girmek istediğinde bu uygulamaya ait çerez olmadığı için “B” uygulaması kendi bilgilerini barındıran çerezi oluşturur ve tarayıcıya ekler. Kullanıcı her iki sisteme aynı bilgileriyle girmesine rağmen, ikisi için de ayrı ayrı giriş yapması gerekmektedir.

non-sso image

Aslında SSO senaryosu için yapılmak istenen şey bu çerezleri farklı domainlerde paylaşabilmek. Fakat tarayıcı bu işlemi yapmamıza izin vermez. Gerekçesi de güvenlik. “A” domaininde yaratılan bir çerez sadece bu domainden erişilebilir. Yani “B” uygulaması “A” uygulamasına ait olan çereze erişip bu çerezde tutulan bilgileri okuyamaz. Bu tam tersi için de geçerlidir.

cookie

Birçok farklı SSO uygulaması ve yöntemi bulunmaktadır. Fakat etkili olan yöntemde bir adet merkez domain bulunur. Bu merkez domain üzerinden tüm authentication işlemleri gerçekleştirilir. Oluşturulacak olan çerez bu domain üzerinde oluşturulur ve diğer domainler ile bu oluşturulan bilgi paylaşılır. Bu paylaşılan bilgi için Token kullanılabilir. Bu token ve giriş yapan kullanıcıyı belirleyecek bilgileri içeren bir dönüş merkez domaine istek yapan diğer domainlere gönderilebilir. Bu Token’i alan diğer domainler bu verinin doğruluğunu sağlayıp giriş işlemini tamamlarlar.

Eğer kullanıcı giriş isteyen bir sayfaya gitmek istediğinde veya giriş yapmak istediğinde bu merkez domaine yönlendirilir eğer kullanıcı zaten giriş yapmışsa bu domainde kayıtlı olan çerezde yer alan bilgi yani “Token” geri döndürülür.

sso system


Genel SSO Uygulaması


Basit olarak anlatılmak gerekirse kullanıcı A sitesine girer. Burada giriş olmak istediğinde M(Main) uygulamaya yönlendirilir. Bu uygulama kendi adına kayıtlı olan çerez var mı diye kontrol eder. Eğer yoksa A uygulamasının giriş sayfasına yönlendirir. Bu sayfada kullanıcı verilerini girdikten sonra M uygulamasında bulunan servis sayesinde giriş bilgilerine karşılık gelen kullanıcı objesini ve bu kullanıcıya ait Token’ı gönderir. A uygulaması bu Token’ı M uygulamasına gönderir ve M uygulaması bu Token’ı çerez olarak kaydeder ve A uygulamasına yönlendirir. A uygulaması gelen istekteki Token’ı bulur ve Token giriş yapılmış olan kullanıcı ile eşleşirse başarılı bir giriş yapılmış olur.

Aynı kullanıcı başka bir uygulama olan B uygulamasına giriş yapmak istediğinde M uygulamasına yönlendirilir. Burada M uygulaması kayıtlı olan çerez var mı diye kontrol eder ve çerezi bulur. Bulduğu çerezin içerisinde bulunan Token’ı B uygulamasına gönderir ve B uygulaması da M de bulunan servis sayesinde bu Token’a ait olan kullanıcı çekerek giriş işlemini gerçekleştirir.

Sisteme ilk giriş;

  • Kullanıcı www.domain1.com adresine istek yapar. Bu adrese gelen istek www.sso.com adresine (SSO sunucusu) ReturnUrl değişkeni ile yönlendirilir. Bu değişken içerisinde www.domain1.com u tutmaktadır.

  • www.sso.com kayıtlı olan bir çerez veya user token olup olmadığını kontrol eder. İlk başta yoktur. Bu yüzden kullanıcı www.domain1.com adresine giriş yapması için geri gönderilir.

  • www.domain1.com sitesi www.sso.com adresinden gelen query string paremetrelerini inceler. Bu paremetreler arasında authentication cookie bulamayınca kullanıcıyı www.domain1.com sitesinin login sayfasına gönderir.

  • Kullanıcı login sayfasında bilgilerini girdikten sonra giriş işlemini başlatır. Bu işlem www.sso.com da yer alan bir servis sayesinde gerçekleştirilir.

  • Eğer bu servisten dönen sonuç başarılı ise bu dönen responseda kullanıcı objesi ve token yer alır. Ardından www.domain1.com bu kullanıcıyı sistemde login olarak gösterir. (Sessiona bu objeyi atma gibi.)

  • Ardından bu kullanıcıya ait olan Token ile bir url oluşturur ve www.sso.com a authentication cookie oluşturması için içerisinde ReturnUrl parametresini de ekleyerek gönderir.

  • www.sso.com sitesi gelen isteği kontrol eder ve içerisinde kullanıcıya ait olan Token i bulur. Sonrasında Token i kullanarak cache’den kullanıcıyı çeker ve kullanıcının bilgisini authentication cookieye ekleyerek cookie yi oluşturur. Ardından cookie yi ve token’ı response a ekler ve ReturnUrl parametresinde yer alan adrese(www.domain1.com) a yönlendirir.

  • Tarayıcı www.domain1.com a ReturnUrl içeren Redirect emrini aldığında ayrıca www.sso.com un authentication cookie sini de alır ve bu cookie yi www.sso.com olarak ekler ve www.domain1.com adresine yönlendirir.

  • www.domain1.com query sting de Token ı görür. Bu tokenı servis aracılığıyla(www.sso.com da bulunan) kontrol eder ve validationu sağlar. Ardından gerçekte istenilen sayfayı açar ve cevabı bu sayfaya basar.

  • Aynı kullanıcı www.domain2.com adresine ReturnUrl i de içeren sorguyu yaptıktan sonra www.sso.com a yönlendirilir.

  • Tarayıcı www.sso.com adresine gelen bir redirect komutu alır. Bu site için authentication cookie önceden tanımlanmıştır. Browser bu cookie yi de requeste ekleyerek www.sso.com a gönderir

  • www.sso.com gelen requeste bakar. İçerisinde bulunan authentication cookie yi bulur. Eğer authentication cookie geçerliyse(süresi geçmediyse) kullanıcı tokenini bu cookieden alır ve query stringe ekleyerek www.domain2.com a yönlendirir.

  • www.domain2.com query stringde tokeni görür ve bu tokeni www.sso.com da bulunan servis sayesinde kontrol eder. Eğer doğruysa asıl gidilmek istenen sayfaya yönlendirilir ve sonuç ekrana basılır.



sso model domain


SSO'nun Faydaları


  • Farklı kullanıcı ve şifrelerden oluşabilecek şifre külfetini azaltır. Tek bir algoritma, tek bir database.
  • Kullanıcıların aynı bilgilerle girebileceği uygulamalara tekrar kullanıcı adı ve şifre girmesini engeller.
  • Giriş yapan kullanıcılar bir çatı altına toplanarak daha düzenli ve sistematik bir sistem oluşur.
  • Uygulamaların oturum açma işlemleri için ekstra işlemler gerçekleştirmesine gerek kalmaz. Tüm işlemler Identity Provider olarak adlandırılan uygulamada gerçekleştirilir.

Token



Oluşturulacak olan Token’ leri yaratma yöntemlerinden biri JWT (JSON Web Tokens) dir. JWT toplam 3 bölümden oluşur.

  • Header
  • Payload
  • Signature

Header bölümü içerisinde iki adet tanımlama bulunur. Hangi hash algoritması kullanılacak ve oluşturulacak olan Token’in tipi.

Payload bölümü claims leri içeren bölümdür. Bu bölümü tanımlamak zorunlu değil fakat istenilen veriler bu bölümde saklanmaktadır. Claimsler genelde kullanıcı bilgisi içeren bölümdür.

Signature bölümü imzanın oluşturulduğu yerdir.

Bu üç bölüm “.” karakteriyle birleşerek Token’i oluşturur.

Örnek;