1 — Identity Server 4 Nedir?

Eren YEMEN
Vakıf Katılım Ar-Ge Merkezi
4 min readNov 11, 2022

IdentityServer, ASP.NET Core için ücretsiz, açık kaynaklı bir OpenID Connect ve OAuth 2.0 framework’üdür.

IdentityServer, kurulum yapılan hazır bir uygulama yada bir işletim sistemiyle gelen bir özellik değildir.

Dominick Baier ve Brock Allen tarafından kurulan ve sürdürülen IdentityServer4, belirteç tabanlı kimlik doğrulama, çoklu oturum açma ve API erişim kontrolünü uygulamalarınıza entegre etmek için gereken tüm protokol uygulamalarını ve genişletilebilirlik noktalarını içerir.

Identity Server4' ün kaynak koduna buradan ulaşabilirsiniz.

IdentityServer4, OpenID Foundation tarafından resmi olarak onaylanmıştır ve bu nedenle spesifikasyonlarla uyumludur ve birlikte çalışabilir.

Microsoft, IdentityServer’ ın en önemli sponsorlarından biridir.

Identity Server4, (3 Aralık 2022) itibariyle desteği sona erecek ve Duende IdentityServer olarak yeni ismi ile ticari bir lisansla hayatına devam edecek. Bireysel geliştiriciler için ise ücretsiz olacaktır.

Identity Server 4 ün anlaşılması için öncelikle OAuth 2.0 ve OpenID Connect protokollerinin anlaşılması gereklidir. Bu protokolleri burada kısaca anlatmaya çalıştım, daha detaylı bilgi edinmek için kendi sayfalarından bu bilgileri okumanızı tavsiye ederim.

Identity Server4'ün Sağladığı Faydalar

Single Sign On/Single Sign Out

Web, spa, mobile, native, api veya yazıcı, el terminalleri gibi farklı türlerdeki uygulamalarda ve cihazlarda merkezi kimlik doğrulamayı sağlayarak sürecin sağlıklı bir şekilde ilerletilmesini sağlar.

Federation Gateway

Azure Active Directory, Google, Facebook, Amazon gibi uygulamaların harici kimlik sağlayıcılarını destekler.

2fa — Two Factor Authentication

Kimlik doğrulama esnasında 2fa için esneklik sağlar. SMS Otp, authenticator code, email gibi yöntemlerde iki aşamalı kimlik doğrulamayı sağlayabilirsiniz.

Customize

Bir çok noktada ihtiyaçlara göre özelleştirmeler yapılmasına imkan verir.

OpenID Connect

OpenID kimlik doğrulama protokolüdür. OAuth 2.0 protokolünün üzerine inşa edilmiştir. Dolayısıyla OAuth 2.0 protokolünü kapsar. Bir uygulamanın mevcut kullanıcının kimliğini bilmesi gerekir. Tipik olarak bu uygulamalar verileri o kullanıcı adına yönetir ve bu kullanıcının yalnızca kendisine izin verilen verilere erişebildiğinden emin olmaları gerekir.

En yaygın kimlik doğrulama protokolleri SAML2p, WS-Federation ve OpenID Connect’tir .

OpenID Connect, üçünün en yenisidir, ancak modern uygulamalarda en fazla potansiyele sahip olduğu için gelecek olarak kabul edilir. En başından itibaren mobil uygulama senaryoları için oluşturulmuştur ve API dostu olacak şekilde tasarlanmıştır.

OpenID Connect protokolünün daha iyi anlaşılması için bir benzetme ile konuyu ele alalım. OpenID esasında bir kimlik verisidir, yani kullanıcı hakkında kullanıcıyı tanımlayan bilgileri barındırır.

Örneğin kullanıcının ad soyad, doğum tarihi, adres, email, TCKN gibi bilgilerinin bu kullanıya ait olduğunu iddia eder. Bir banka şubesine gittiğinizde sizin adınıza işlem yapılmadan önce kimliğinizin doğrulanması gerekir. Bunun için kimlik kartı gösterilerek kimlik doğrulama işlemi gerçekleştirilmiş olur. Kimlik kartı üzerinde bulunan size ait olan veriler sizin hakkınızda doğruluğuna güvenilen iddialardır. Kimlik kartı burada Identity (ID) Token görevini üstlenir. Kimlik üzerindeki size ait olduğu iddia edilen ad soyad gibi veriler ise claimlere karşılık gelir. Kimliği temin ettiğiniz devlet kurumu ise burada Identity Server görevindedir.

Burada farkettiyseniz kimlik bilgisini başka bir yerden istiyoruz. Bankanın verdiği herhangi bir kimlik kartı yada müşteri kartı değilde devlet kurumu tercih ediliyor. Bu şekilde kimlik doğrulama yöntemine External Identity Providers (Harici Kimlik Sağlayıcı) deniyor. Yani bu işlem bir e-ticaret sitesine google, amazon, facebook yada başka bir kimlik doğrulama mekanizması üzerinden bağlanmak gibidir.

Tabi sadece kimlik doğrulamak işimizin sadece bir parçasıdır. Bununla birlikte gittiğimiz banka şubesini de yetkilendirmek gerekir. Yani bizim adımıza hangi işlemleri yapabileceğine dair bir kısıt koyma ihtiyacı vardır. İşte bu noktoda OAuth protokolü devreye girerek yetkilendirme işlemini üstlenir. Bu konuyu aşağıda ayrı başlıkta detaylandıracağız.

Şunu belirtelim ki yukarıda openID Connect protokolü OAuth protokolünü kapsar demiştik. Yani hem kimlik doğrulama yapar hemde OAuth ı kullanarak yetkilendirme yapar.

Daha detaylı bilgi edinmek için buraya bakabilirsiniz.

OAuth 2.0

OAuth2 yetkilendirme protokolüdür. Uygulamaların, API’lerle iletişim kurmak için iki temel yolu vardır: uygulama kimliğini kullanmak veya kullanıcının kimliğini devretmek. Bazen her iki yöntemin birleştirilmesi gerekir.

OAuth2, uygulamaların bir güvenlik belirteci hizmetinden erişim belirteçleri istemesine ve bunları API’lerle iletişim kurmak için kullanmasına olanak tanıyan bir protokoldür. Kimlik doğrulama ve yetkilendirme merkezileştirilebildiğinden, bu yetkilendirme hem istemci uygulamalarında hem de API’lerde karmaşıklığı azaltır.

OAuth2 yetkilendirme protokolüdür demiştik. Buradaki yetkilendirme client yani uygulama yetkilendirmesinden bahseder. Kullanıcıya dair bir yetkilendirme söz konusu değildir.

Daha iyi anlaşılması için bir örnek ile konuyu inceleyelim. Sigorta şirketlerini düşünelim. Trafik, kasko, dask, sağlık sigortası gibi birçok türde poliçe oluşturmakta. Sigorta şirketlerinin acenteleri var ve her acente bu işlemleri yapabiliyor. Acenteleri kısıtlamak isteyebiliriz. Örneğin bir acente sadece trafik ve kasko poliçeleri kesebilsin diğeri sadece sağlık sigortaları ve dask poliçeleri kesebilsin, yada bütün acenteler bütün poliçeleri kesebilir ama poliçeleri iptal edemez, yada müşterilerine indirim tanımlayamaz. müşteri ekleyebilir ve görüntüleyebilir ama müşteri silemez gibi bu işlemleri uzatabiliriz. Bu şekilde acentelerin yapabileceklerini sınırlamış oluyoruz. Bu örnekte sigorta şirketi API Resource, acente ise client durumunda oluyor. Tüm yetki kabiliyetlerini ise scope olarak adlandırıyoruz.

Bir müşteri acenteye geldiğinde acentenin sigorta şirketinden o müşteri ile ilgili bilgilere (claim) erişebileceğini ve müşteri adına poliçe kesme, görüntüleme yetkisi olduğunu bilmesi ve onaylaması gerekir. İşte OAuth protokolü en temelde bu mantıkdan ibarettir.

Daha detaylı bilgi edinmek için buraya bakabilirsiniz.

--

--