Yazılım Mimarileri ve Tasarım Desenleri Üzerine

IdentityServer4 Yazı Serisi #17 – Merkezi Üyelik Sistemi – Client Uygulaması İçin Role Based Authorization

Merhaba,

IdentityServer4 Yazı Serisinin bu onyedinci makalesinde, geliştirilen client uygulaması için rol tabanlı yetkilendirmeyi ele alacağız.

Client uygulamasında rol tabanlı yetkilendirme için esasında bildiğimiz claim tabanlı bir yetkilendirme yapmamız gerekecektir. Burada MVC uygulamalarında kullandığımız klasik claim bazlı doğrulamadan ziyade, IdentityServer4 yapılanmasında oluşturulan ve kullanıcı ve client ile ilişkilendirilen bir claim’i, client uygulamasında role tabanlı yetkilendirme ile ilişkilendirme üzerine çalışma sergileyeceğiz. Dolayısıyla öncelikle o rolü temsil eden bir identity resource oluşturacak ve ardından bu identity resource’ü kullanıcı ve client tanımlamalarıyla ilişkilendirecek ve en nihayetinde client uygulaması üzerinden talep edecek ve role olarak kullanacağız.

İçerikte pratik örneklendirmeyi yazı serimiz boyunca geliştirdiğimiz uygulama üzerinden sağlayacağız. Uygulamanın son haline erişebilmek için buraya tıklayınız. Hadi buyrun başlayalım…

Artık client uygulamasında rol bazlı yetkilendirmenin geçerli olması istinilen sayfaları ‘Authorize’ attribute’u ile aşağıdaki gibi işaretleyebiliriz.

    public class BakiyeController : ControllerBase
    {
        [Authorize(Roles = "admin")]
        public IActionResult BakiyeGor()
        {
            return Ok(1000);
        }
        [Authorize(Roles = "moderator")]
        public IActionResult HareketDokumu()
        {
            return Ok("Hareket dökümü");
        }
        [Authorize(Roles = "admin, moderator")]
        public IActionResult CiktiAl()
        {
            return Ok("Döküman alınıyor");
        }
    }

Yukarıdaki kod bloğunda görüldüğü üzere ‘Bakiye(Controller)’ içerisindeki ‘BakiyeGor’ action’ı ‘admin’, ‘HareketDokumu’ action’ı ‘moderator’ ve ‘CiktiAl’ action’ı ise her iki rolden birini gerektirmektedir. Biz ise ‘test-user1’e ‘admin’, ‘test-user2’ye ise ‘moderator’ rollerini vermiştik. Şimdi gelin test edelim.

test-user1 test-user2

Dikkat ederseniz kullanıcılar rolleri olmayan sayfalara erişmeye çalıştıkları zaman Account/AccessDenied sayfasına yönlendirilmektedirler. Böyle bir durumda ya ilgili sayfa tasarlanmalı ya da aşağıdaki gibi client uygulamasının ‘Startup.cs’ dosyasında farklı bir sayfaya yönlendirme gerçekleştirilmelidir.

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            .
            .
            .
            .AddCookie("OnlineBankamatikCookie", options => options.AccessDeniedPath = "/home/accessdenied")
            .
            .
            .
        }
    }

İşte IdentityServer4 mimarisinde rol tabanlı yetkilendirme bu şekilde gerçekleştirilmektedir.

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

Örnek projeyi indirmek için buraya tıklayınız.

Mobil sürümden çık