Rol tabanlı yetkilendirme - talep temelli yetkilendirme-Role based authorization vs claims based authorization

Herkes  Yazar Herkes Yazar

22 Eylül 2019 Yazılım Dilleri (127) /Asp.Net Core (2) (77)

Rol tabanlı yetkilendirme - talep temelli yetkilendirme-Role based authorization vs claims based authorization

Paylaşmak güzeldir. Lütfen sizde paylaşın...


Rol tabanlı yetkilendirme - talep temelli yetkilendirme-Role based authorization vs claims based authorization

 

Kullanıcı Yetkilendirme

Yetkilendirme, giriş yapan kullanıcının yapabileceklerini ve yapamadıklarını belirleme işlemidir. Başvuru yetki şartlarımıza göre, Roller, Talepler veya ikisinin bir kombinasyonunu kullanabiliriz.

Role Dayalı Erişim Kontrolü (RBAC)

Kuruluşunuzda aşağıdaki rollere sahip olabilirsiniz

  • İşçi, çalışan, personel
  • Yönetici
  • İK

Oturum açan kullanıcının ait olduğu rol veya rollere bağlı olarak, uygulamadaki belirli kaynaklara erişim yetkisi verebilir veya veremezsiniz. Yetkilendirme kontrolleri yapmak için Roller kullandığımızdan, buna Role Dayalı Erişim Kontrolü  (RBAC) veya Role Dayalı İzin denir .

Rol temelli yetkilendirmeyi uygulamak için ASP.NET Core'da Roles parametresiyle Authorize özelliğini kullanırız .

[Authorize(Roles = "Admin")]
public class AdministrationController : Controller
{
}

Claims Based Access Control (CBAC)

Hasar Tabanlı Yetkilendirme da İddialar Tabanlı Erişim Kontrolü denir. Talep Tabanlı Yetkilendirmeyi anlamadan önce , bir Talep'in ne olduğunu anlayalım .

Bir iddia bir ad-değer çiftidir. Kullanıcı hakkında yapabileceklerinin ve yapamadıklarının değil, aslında kullanıcıyla ilgili bir bilgi parçasıdır. Örneğin, kullanıcı adı, e-posta, yaş, cinsiyet vb. Tüm iddialardır. Bu talepleri uygulamanızdaki yetkilendirme kontrolleri için nasıl kullandığınız, uygulama işinize ve yetkilendirme gereksinimlerinize bağlıdır. 

Örneğin, bir çalışan portalı inşa ediyorsanızCinsiyet talep değeri kadın ise, giriş yapmış kullanıcının doğum izni başvurusunda bulunmasına izin verebilirsiniz Benzer şekilde, bir e-ticaret uygulaması oluşturuyorsanız , yaş talep değeri 18'den büyük veya eşitse , oturum açan kullanıcının sipariş vermesine izin verebilirsiniz .

Alacaklar politikaya dayalıdır. Bir politika oluşturuyoruz ve o politikada bir veya daha fazla hak talebi içeriyoruz. Politika daha sonra talep bazlı yetkilendirmeyi uygulamak için Yetkilendirme özelliğinin politika parametresiyle birlikte kullanılır .

[Authorize(Policy = "DeleteRolePolicy")]
public async Task<IActionResult> DeleteRole(string id)
{
}


ASP.NET Çekirdek olarak, bir rol türü Rolü bir taleptir. 

Bunu onaylamak için, aşağıdaki ifadeyi Visual Studio'daki Anlık pencerede yürütün Tüm oturum açan kullanıcı rolleri listelenir. Ayrıca, bu rollerin yalnızca bir tür rol iddiası olduğunu da göreceksiniz .

User.Claims.Where(c=> c.Type == ClaimTypes.Role).ToList()

Roller Politika

Taleplerin politikaya dayalı olduğunu biliyoruz. Bir yana, rol türü rolünün iddiası da , biz de yeni politika sözdizimi ile rol kullanabilirsiniz.

Taleplerle, bir politika oluşturur ve bu politikaya bir veya daha fazla talep ekleriz. Aynı şeyi rollerle de yapabiliriz. Bir politika oluşturun ve bu politikaya bir veya daha fazla rol ekleyin. 

public void ConfigureServices ( IServiceCollection hizmetleri)
{
    services.AddAuthorization (options =>
    {
        options.AddPolicy ( "AdminRolePolicy" ,  policy => policy.RequireRole ( "Admin" ));
    });
}

Politikaya birden fazla rol eklemek istiyorsanız, onları virgülle ayırmanız yeterlidir.

options.AddPolicy("SuperAdminPolicy", policy =>
                  policy.RequireRole("Admin", "User", "Manager"));

*** !! AspNetUserClaims Table ClaimType değeri ile ClaimValue değerlerinin her ikisinini de kontrol ederek kullanmak istersek

oturum açan kullanıcının ClaimType "Rolü Düzenle" ve  ClaimValue="true" değerine sahip olmasını kontrol edebilir bu şatların sağlanmasını isteyebiliriz.

//Bu şekilde bir kullanımın veri tabanına kayıt ve kontrol işleleri için değişiklikler yapılması gerektiğindene https://www.youtube.com/watch?v=I2wgxzLbESA&list=PL6n9fhu94yhVkdrusLaQsfERmL_Jh4XmU&index=98 linkteki videonun izlenmesi ve uygulanması önem arz etmektedir.

.Bu durumda ekleyeceğimiz policy aşağıdaki gibi olmalıdır.

services.AddAuthorization (options =>
{
    options.AddPolicy ( "EditRolePolicy" ,
        policy => policy.RequireClaim ( "Rolü Düzenle" , "true" ));
});

** Diğer bir kullanım şekli olarak da İzin verilen değerlerin bir listesi de belirtilebilir. Aşağıdaki politikayı yerine getirmek için giriş yapmış kullanıcının ABD, Hindistan veya İngiltere değerinde Ülke talebinde bulunması gerekir.

Birden fazla şartı kontrol ederek yetkilendirme politakası için uygun olanı aşağıdaki kullanım olacaktır.

services.AddAuthorization (options =>
{
    options.AddPolicy ( "AllowCountryPolicy" ,
        policy => policy.RequireClaim ( "Ülke" , "ABD", "Hindistan", "İngiltere" ));
});

ClaimType karşılaştırması büyük / küçük harf duyarlıdır; ClaimValue karşılaştırması büyük / küçük harf duyarlıdır.

 


Politika daha sonra denetleyici veya denetleyici eyleminde kullanılabilir.

[HttpPost]
[Authorize(Policy = "SuperAdminPolicy")]
public async Task<IActionResult> DeleteRole(string id)
{
    // Delete Role
}

Neden her ikisi de ASP.NET Çekirdeğinde var

? Asp.net'in önceki sürümlerinde talep bazlı yetkilendirme, sadece rol bazlı yetkilendirme yoktu. 

Talep bazlı yetkilendirme nispeten yenidir ve önerilen yaklaşımdır.

Rol bazlı yetkilendirme , geriye dönük uyumluluk için asp.net çekirdeğinde hala desteklenmektedir. Talep bazlı yetkilendirme önerilen yaklaşım olsa da, uygulama yetkilendirme gereksinimlerinize bağlı olarak rol bazlı yetkilendirme, talep bazlı yetkilendirme veya her ikisinin birleşimini kullanabilirsiniz.

 

Sayfa görünümünde Claims based authorization kontrol ve ConfigureServices 'te AddAuthorization kullanımı için aşağıdaki linki takip ediniz.

https://www.herkesyazar.net/515-aspnet-core-mvcde-gorunumlerde-policy-yet

 

İyi Çalışmalar..

Makale orjinal linki: https://csharp-video-tutorials.blogspot.com/2019/08/role-based-authorization-vs-claims.html


Paylaşmak güzeldir. Lütfen sizde paylaşın...



Herkesyazar Ara