IdentityServer4 Yazı Serisi #1 – IdentityServer4 Nedir? OAuth 2.0 ve OpenID Connect Protokolleri Nelerdir?

Merhaba,

Bu içeriğimizde IdentityServer4 Yazı Serisinin, konuya dair teorik temellerini atacağımız ilk makalesini kaleme alıyor olacak ve IdentityServer4’ün ne olduğuna, bunun yanında OAuth 2.0 ve OpenID protokollerinin neler olduğuna ve her ikisinin hangi paydada birleştiğine değineceğiz. Serimizin devamında ise IdentityServer4’ün hangi problemlere yahut senaryolardaki ihtiyaçlara çözüm getirdiğine değinerek atacağımız sağlam teori üzerine pratiksel çalışmalar gerçekleştireceğiz. O halde buyrun başlayalım…

IdentityServer4 Nedir?

Açık ya da kapalı bir sistem düşünelim. Her sistem, türü ne olursa olsun mevcut düzenini korumaya dair bir içgüdü ile hareket etmektedir. Buradaki temel amaç, sistemdeki verilerin sızıntılara karşı korunmasını sağlamak ve bunun için dış erişimi kesmek yahut kontrollü hale getirmek ve olabildiğince yönetilebilirliği sağlamaktır diyebiliriz. Olayı yazılımsal açıdan değerlendirirsek eğer geliştirilen her bir uygulama özünde bu refleksi benimsemekte ve uygulamadaki verileri dış dünyaya karşı korumayı amaç edinmektedir. Yahut varsa tüketecek dış kaynak ilgili uygulama tarafınca tanımlanmış/onaylanmış/doğrulanmış olmasını tercih etmektedir. Bunun için yüksek ölçekli kullanıcı denetim mekanizmaları üretilmekte veya kütüphaneler kullanılmaktadır.

Biliyorsunuz ki, server side geliştirilen bir web uygulamasında kullanıcı denetimleri genellikle Cookie, Session gibi aparatlar sayesinde gerçekleştirilmektedir.(Bknz: Asp.NET Core Identity – Yazı Dizisi) Bunların dışında Client Side geliştirilen uygulamalarda ise Json Web Token(JWT) tabanlı denetimler tercih edilmektedir. Tüm bunlardaki amaç sistemi dış dünyaya karşı korumak ve dış dünyadaki tüketicileri tanımlı/bilinir hale getirmektir.

Uygulamalardaki veri güvenliği, gelişen teknolojilerde veriye erişip işlemek isteyen farklı cihazların yahut clientların olmasından dolayı ayrı bir boyut kazanmış bulunmaktadır. Bu clientlar; aynı özellikte olabilecekleri gibi farklı altyapılara sahip, farklı dillerle geliştirilmiş ve farklı cihazlar olabilir. Bu şekilde veri tüketicisinin fazla olduğu durumlarda bizler için güvenlik ekstra maliyetli hale gelmektedir. Sanırım bu durumu bir örnekle somutlaştırmak en doğrusu olacaktır.

‘X’ bankası olarak hizmet veren bir bankanın geliştirdiği Web API üzerinden kullanıcıların bakiye, borç, harç vs. gibi bilgilerine erişilebildiğini düşünelim. Bu API’ı tüketecek olan client’ların; SPA(Single Page Application), Web Application, Mobile Application ve bir başka Web API olduğunu varsayalım. Eee günümüzde bir uygulama tek bir projeden ibaret olmamakta, bir veya birden fazla projenin ilişkisi sonucu meydana gelmektedir. Dolayısıyla ‘X’ bankasının geliştirdiği Web API’ı tüketecek bu client’ların birbirlerinden farklı olması günümüzde gayet doğal bir durumdur. Velhasıl… Bu client’ların X API ile olan erişim düzeylerinin ve kullanıcı denetimlerinin, her birinin altyapısına uygun bir şekilde ve ihtiyaca binaen farklı davranışlarda erişim yöntemleri benimsenerek, her bir uygulamada ayrı ayrı kodlanarak geliştirilmesi gerekecektir. Bu geliştirme süreci her bir client için gerçekleştirileceğinden dolayı haddinden fazla bir maliyet söz konusu olacaktır. Hatta ileriki süreçlerde sisteme yeni bir client’ın eklenmesi durumunda kaçınılmaz olarak o client’ın güvenlik teknolojisine göre geliştirme ve yapılanma tekrar ele alınmak mecburiyetinde kalınacak ve bu maliyet her daim potansiyel olarak bir köşede duracaktır. İşte böyle bir durumda X API’ı tüketecek client’lar için merkezi bir Authentication ve Authorization işlemlerini üstlenecek uygulamaya ihtiyaç duyulmaktadır.

İşte bu misalden yola çıkarsak, bir uygulamaya erişim gösterecek tüm client’lar için authentication ve authorization sorumluluğunu üstlenecek uygulamaya ihtiyacımız olduğu kanaatine varmaktayız. Burada devreye IdentityServer4 girmektedir. Lakin IdentityServer4’ün ne olduğuna ve ihtiyacının tam olarak nerelerde hissedildiğine değinmeden önce OAuth 2.0 ve OpenID Connect protokolleri üzerinde bilgi sahibi olunması gerekmektedir.

OAuth 2.0 Nedir?

Uygulamalar arası veri transferinde kullanılan açık bir yetkilendirme(authorization) protokolüdür. OAuth2 desteği ile geliştirilen bir uygulama ile yetkilendirilen kullanıcı ilgili protokol sayesinde başka bir uygulamanın veri kaynağına erişebilmektedir. Bu duruma genellikle Facebook Login, Google Login vs. gibi sosyal medya odaklı login işlemleri örnek verilebilmektedir. Buradaki mantık, OAuth2 protokolünü kullanan ilgili sosyal medyalar üzerinden yapılan giriş talebi neticesinde yine OAuth2 protokolünü kullanan ve bu protokolü kullanan uygulamalara güvenen client’a bir JWT verilmekte ve ilgili client tarafından bu token doğrulanabilmektedir. İşte bu hizmeti OAuth2 protokolü sağlamaktadır.

OAuth2 protokolü sadece yetkilendirme(authorization) için kullanılan bir protokoldür.

IdentityServer4 Yazı Serisi #1 - IdentityServer4 Nedir OAuth 2.0 ve OpenID Connect Protokolleri Nelerdir.0 ve OpenID Connect Protokolleri NelerdirYandaki görseli incelerseniz eğer; client(soldaki), farklı bir uygulama olan API’a(sağdaki) erişebilmek için tüm erişim yetkisini ‘OAuth Service’ isimli projeden(ortadaki) almaktadır. İşte burada bir uygulamadan alınan yetkiyi başka bir uygulamada kullanmamızı sağlayan teknoloji OAuth 2.0 protokolüdür.

Bu yöntemle kullanıcı API’a erişebilme yetkisi için kullanıcı adı ve şifresini client’a vermek zorunda kalmayacak, direkt olarak ‘Auth Service’ üzerinden ilgili client adına yetkiyi alacak ve erişimi sağlayacaktır. Böylece kullanıcıdaki güvensizlik ortadan kalkmakta ve şifreyi herhangi bir client ile paylaşmak zorunda kalınmamaktadır.

Görsele yeniden gelecek olursak eğer ‘Auth Service’ client tarafından yapılan erişim talebi neticesinde geriye bir JWT döndürecektir. Bu JWT sayesinde client, API’a erişim sağlayabilmektedir.

OAuth 2.0’ın bir başka getirisi ise client ile resource(kaynak API) arasındaki yetkilendirme konfigürasyonunu sağlamasıdır. Yani client, ‘OAuth Service’ uygulamasından API’a dair hangi bilgileri ve yetkileri istediğini bildirebilir. Burada onaylayıcı merci kullanıcı olacaktır. Günlük hayattaki internet kullanımınızda herhangi bir web uygulamasında ‘Facebook Üzerinden Giriş Yap’ yöntemiyle elbette ki oturum açmışsınızdır. Oturum açarken Facebook’un sizi şöyle bir pencere ile uyardığını hatırlayınız…

İşte burada kullanıcı olarak OAuth 2.0 protokolü sayesinde Facebook üzerinden giriş yapmak istediğiniz client’ın Facebook’tan istediği yetkilerin onayı sizlere sunulmakta, ‘Tamam’ dediğiniz taktirde yetkiyi client’a vermiş ve güvenli bir erişime müsade etmiş olmaktasınız. Yapısal olarak kullanıcının verdiği yetkileri ve bilgileri içerisinde barındıran bir access token değeri client’a gönderilmekte ve client ilgili API’ı bu yetkilendirilmiş token ile tüketmektedir.

Ayrıca kullanıcının yetkilerle birlikte hangi verilerini paylaştığını da bilmesi ve buna iradesiyle karar vermesi Kişisel Verileri Koruma Kanunu açısından oldukça yasal bir süreç olacaktır.

OAuth 2.0 protokolü, kullanıcı bilgilerinin client’larla paylaşılmaksızın ana kaynaktan güvenli bir şekilde data alınmasını sağlayarak kişisel verilerin kötü niyetli insanların eline geçmesi ihtimaline çözüm getirmektedir.

OAuth 2.0 protokolünü kullanan popüler uygulamalar

  • Facebook
  • Google
  • E-Devlet
    ÖSYM Aday İşlemleri Sistemi(ais.osym.gov.tr), İnteraktif Vergi Dairesi(ivd.gib.gov.tr) gibi uygulamalar E-Devlet üzerinden authorization olabilmektedir.

OAuth 2.0 protokolü neden kullanılmalıdır?

Bunu günümüze dair olası bir tehlikeli duruma istinaden cevaplamakta fayda görmekteyim. Günümüzde Facebook, Instagram vs. gibi sosyal medyaları yahut Hepsiburada, Amazon, Gittigidiyor, N11 vs. gibi e-ticaret uygulamalarını tek elden yönetim amaçlı entegrasyonel uygulamalar mevcuttur. Bu uygulamalara işletmenizle ilgili tüm sosyal medya ve e-ticaret hesap bilgilerinizi veriyor(username, password vs.) ardından tek elden işletmenize dair ilgili tüm alanları yönettiğinizi düşünüyorsunuz. Tabi ki de bu düşüncede haklı yanlarınız olabilir lakin kullandığınız entegrasyon firmasının sahibi, çalışanı hiç olmadı uçan kuşu kötü niyetli çıkabilir ve sizin sisteme yüklediğiniz tüm hesap bilgilerinizi elde edip işletmenize dair her türlü mahcubiyeti doğurabilecek geri dönüşsüz hamlelerde bulunabilir. Şahsen, işlevsel açıdan bu şekilde kullanıcının özel bilgilerine ihtiyacı olan uygulamalara karşı bir kere daha yaratabileceği olumlu olumsuz etkilerinin düşünülmesini öneririm. Lakin bu uygulama sizden ilgili sosyal medyaların ve e-ticaret sitelerinin hesap bilgilerini istemeden OAuth 2.0 protokolünü kullanarak authorization işlemini gerçekleştiriyorsa gönül rahatlığıyla tercih edilebilir.

OAuth 2.0 protokolünde kullanılan terimler nelerdir?

  • Resource Owner : Veriyi elde eden son kullanıcıdır. Kaynak sahibi user.
  • Client Application : Resource Owner adına korumalı veri kaynaklarına erişen uygulamadır. SPA(Single Page Application), Web API, Mobile, Tablet, Akıllı Ütü vs.
  • Resource Server : Kaynak sağlayan API’lardır.
  • Authorization Server : Yetki ve erişimi yöneten uygulamadır. Identity Server’da denmektedir.

OAuth 2.0 protokolü, kullanıcı yetkilendirme amaçlı değil, uygulama yetkilendirme amaçlıdır. Bir uygulama tarafından doğrulanmış kullanıcıların başka bir uygulama tarafından da doğrulanmış olarak kabul edilmesine dayanır.

OpenID Connect Nedir?

OpenID Connect, esasında bir protokolden ziyade OAuth 2.0 üzerinde kimlik doğrulama(authentication) işlemlerini üstlenen bir katmandır. API dostu bir yapı sağlamakta ve işlemleri basit tutarak JWT kullanımını kolaylaştırmaktadır.

OpenID Connect, kullanıcı ile ilgili işlemlerden sorumluyken, OAuth 2.0 ise yetkilendirme işlemlerinden sorumludur. Dolayısıyla OAuth 2.0 ile OpenID Connect birbirlerini tamamlayan iki protokoldür.

IdentityServer4 Yazı Serisi #1 - IdentityServer4 Nedir OAuth 2.0 ve OpenID Connect Protokolleri Nelerdir.0 ve OpenID Connect Protokolleri Nelerdir

OpenID Connect protokolü ile OAuth 2.0 protokolleri arasındaki ilişki. Önce OpenID Connect ile authentication, ardından OAuth 2.0 ile authorization.

Client tarafından Auth Service’e yapılan talep neticesinde User’a gelen onay ekranında kullanıcı bilgisiyle alakalı olan kısım OpenId Connect protokolüyle ilgiliyken, yetkilerle ilgili olan kısım ise OAuth 2.0 protokolüyle ilgili olacaktır.

Evet… Bu noktaya kadar OAuth 2.0 ve OpenID Connect protokollerinin ne olduklarına ve ne amaca hizmet ettiklerine değinmiş olduk. Şimdi sıra tüm bu protokoller dışında IdentityServer4’ün ne olduğuna ve hangi probleme çözüm getirdiğine değinmeye gelmiştir.

IdentityServer4 Nedir?

Bir uygulama üzerinden farklı uygulamalara yahut client’lara, authorization ve authentication gibi hizmetler vermek istiyorsanız eğer ilgili uygulamada OAuth 2.0 ve OpenID Connect protokollerinin uygulanması gerekmektedir. IdentityServer4, OAuth 2.0 ve OpenID Connect protokollerini uygulamanıza ayrı ayrı entegre etmek yerine kendisi bu sorumluluğu üstlenmekte ve ekstra kod yazmaksızın buradaki maliyeti düşürmektedir.

IdentityServer4, OpenID Connect ve OAuth 2.0 protokollerini kullanarak, tek bir noktadan uygulamalar arası kimliklendirme ve yetkilendirme kontrolü sağlayan açık kaynak(open source) bir framework’dür.

IdentityServer4’ün özellikleri nelerdir?

  • Doğrulama Merkezi
    Web, mobil, native, service vs. gibi tüm uygulamalar için merkezi oturum açma mantığı ve işlevi oluşturulabilir.
  • Single Sign On/Single Sign Out
    Birçok uygulama türünde, bir noktadan oturum açma ve oturum kapatma işlevselliği gerçekleştirilebilir.
  • API Erişim Kontrolü
    Sunucudan sunucuya, web uygulamaları, SPA(Single Page Application), native ve mobil uygulamalar gibi çeşitli client’lar için API erişim kontrolleri sağlanabilir.
  • Federation Gateway
    Azure Active Directory, Google, Facebook vs. gibi uygulamaların harici kimlik sağlayıcılarını destekler. Böylece uygulamanızın bu harici sağlayıcılara nasıl bağlanılacağının ayrıntılarından sizi arındırmış olur.
  • Customize(Özelleştirme)
    IdentityServer4’ün en önemli özelliğidir diyebiliriz. Günlük hayatta yaşanılabilen birçok senaryoya karşı IdentityServer4 özelleştirilebilmektedir.

    IdentityServer4, hazır bir product yahut Saas(Software as a Service) olmadığından dolayı senaryoya uygun olarak uyarlanabilmektedir.

  • Open Source
    IdentityServer4 open source bir framework’tür. Ticari ürünlerde kullanılabilmesi yasaldır.
  • Destek
    Yaşanılan problemlerde yahut yardıma ihtiyaç olduğu taktirde IdentityServer4 yetkilileri sizlere ücretsiz bilgi desteği sağlamaktadır.

IdentityServer4 çalışmalarında kullanılan terimler nelerdir?

  • Client Uygulamaları : Kullanıcıların kullandıkları güvenli veri kaynaklarına(API) erişmek isteyen uygulamalardır.
  • User : Kaynaklara erişmek için client’ı kullanan kişidir.
  • Veri Kaynakları(Resources) : IdentityServer tarafından korunmasını istediğimiz datalardır. Her kaynağın bir adı vardır ve istemciler erişmek istedikleri kaynağı belirtmek için bu adı kullanırlar. Kaynaklar genellikle Web API olarak tasarlanırlar ama bu tercihe bağlı olduğu için zorunlu değildir.
  • IdentityServer : Client uygulamalarına karşı OAuth 2.0 ve OpenID Connect protokollerini kullanarak güvenliği sağlar. Veri kaynaklarını korur, kullanıcı
    ve client doğrulamasını gerçekleştirir ve oturumun açılıp kapanmasını sağlar. Ayrıca client uygulamalara identity ve access token üretiminden ve doğrulanmasından sorumludur.
  • Identity Token : Kimlik doğrulama işleminin sonucunda üretilen değerdir. Bir kullanıcıyı tanımlayan bilgilerle birlikte, kimliğin ne zaman ve hangi yöntemle doğrulandığını içerir.
  • Access Token : Veri kaynaklarına(Resources) erişimi sağlayan değerdir. Client’lar bu token değeri eşliğinde istekte bulunurlar. Eğer token doğrulanırsa veri kaynağına erişim gerçekleşecek ve data elde edilecektir. Access Token, client ve kullanıcı bilgileri içerir. Veri kaynağı olan API bu bilgileri kullanarak yetkilendirme(authorization) yapar ve verileri erişime açar.

IdentityServer4 Tarafından Desteklenen Özellikler Nelerdir?

IdentityServer4 aşağıdaki özellikleri desteklemektedir;
OpenID Connect

OAuth 2.0

Sonuç
Bu içeriğimizde OAuth 2.0 ve OpenID Connect protokollerini izah ederek, bu protokoller üzerine inşa edilen IdentityServer4 framework’ünün ne olduğuna ve hangi problemlere çözüm getirdiğine genel bir şekilde teorik temellendirmede bulunmuş olduk. Sonraki içeriklerimizde IdentityServer4 framework’ünün çözüm getirdiği problem senaryolarını tek tek ele alacak ve ardından mimariyi pratik olarak değerlendirmeye başlayacağız.

İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

1 Cevap

  1. 17 Ekim 2020

    […] IdentityServer4 Yazı Serisi #1 – IdentityServer4 Nedir? OAuth 2.0 ve OpenID Connect Protokolleri … […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*