Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir kimlik oluşturulduğunda bir veya daha fazla role ait olabilir. Örneğin, Tracy ve Administrator
rollerine User
aitken Scott yalnızca role ait User
olabilir. Bu rollerin nasıl oluşturulduğu ve yönetilme şekli yetkilendirme işleminin yedekleme deposuna bağlıdır. Roller, sınıfındaki yöntemi aracılığıyla geliştiriciye IsInRoleClaimsPrincipal sunulur.
AddRoles rol hizmetlerine eklenmelidir.
Roller talep olsa da, tüm talepler rol değildir. Kimlik verene bağlı olarak bir rol, grup üyeleri için talepleri uygulayabilecek bir kullanıcı koleksiyonu olabileceği gibi, kimlik üzerinde gerçek bir talebe sahip olmak da olabilir. Ancak, talepler tek bir kullanıcı hakkında bilgi olarak tasarlanmalıdır. Kullanıcıya talep eklemek için rollerin kullanılması, kullanıcı ile tek tek talepleri arasındaki sınırı karıştırabilir. Bu karışıklık, SPA şablonlarının roller etrafında tasarlanmamasıdır. Buna ek olarak, şirket içi eski bir sistemden geçiş yapılan kuruluşlarda rollerin yıllar içinde yaygınlaşması, rol talebi SPA'lar tarafından kullanılabilen bir belirtecin içinde bulunamayacak kadar büyük olabileceği anlamına gelebilir. SPA'ların güvenliğini sağlamak için bkzIdentity için Bir Web API arka ucu güvenliğini sağlamak için kullanma.
Bu makalede, ASP.NET Core MVC ve Razor uygulamaları için rol tabanlı yetkilendirme özetlenmiştir. Blazor uygulamaları için bkz. ASP.NET Core Blazor kimlik doğrulaması ve yetkilendirme ve Microsoft Entra ID grupları ve rolleri ile Blazor WebAssembly ASP.NET Core.
'a Rol hizmetleri ekleme Identity
Uygulamanın Program.cs
yapılandırmasındaki AddRoles rol türüyle arayarak Identity rol tabanlı yetkilendirme hizmetlerini 'ye kaydedin. Aşağıdaki örnekteki rol türü:IdentityRole
builder.Services.AddDefaultIdentity<IdentityUser>( ... )
.AddRoles<IdentityRole>()
...
Yukarıdaki kod Için Microsoft.AspNetCore.Identity. KULLANıCı arabirimi paketi ve için using
bir Microsoft.AspNetCore.Identity
yönergesi.
Rol denetimleri ekleme
Rol tabanlı yetkilendirme denetimleri:
- Bildirim temellidir ve istenen kaynağa erişmek için geçerli kullanıcının üyesi olması gereken rolleri belirtin.
- Bir denetleyici içindeki Sayfalara Razor , denetleyicilere veya eylemlere uygulanır.
- Sayfa işleyici düzeyinde uygulanamıyorRazor, Sayfaya uygulanmalıdır.
Örneğin, aşağıdaki kod üzerindeki AdministrationController
tüm eylemlere erişimi rolün Administrator
üyesi olan kullanıcılarla sınırlar:
[Authorize(Roles = "Administrator")]
public class AdministrationController : Controller
{
public IActionResult Index() =>
Content("Administrator");
}
Birden çok rol virgülle ayrılmış liste olarak belirtilebilir:
[Authorize(Roles = "HRManager,Finance")]
public class SalaryController : Controller
{
public IActionResult Payslip() =>
Content("HRManager || Finance");
}
SalaryController
öğesine yalnızca rolün veya HRManager
üyesi olan kullanıcılar erişebilir.
Birden çok öznitelik uygulandığında, erişen bir kullanıcının belirtilen tüm rollerin üyesi olması gerekir. Aşağıdaki örnek, bir kullanıcının hem hemüyesi olmasını gerektirir:
[Authorize(Roles = "PowerUser")]
[Authorize(Roles = "ControlPanelUser")]
public class ControlPanelController : Controller
{
public IActionResult Index() =>
Content("PowerUser && ControlPanelUser");
}
Eylem düzeyinde ek rol yetkilendirme öznitelikleri uygulanarak eyleme erişim sınırlandırılabilir:
[Authorize(Roles = "Administrator, PowerUser")]
public class ControlAllPanelController : Controller
{
public IActionResult SetTime() =>
Content("Administrator || PowerUser");
[Authorize(Roles = "Administrator")]
public IActionResult ShutDown() =>
Content("Administrator only");
}
Önceki ControlAllPanelController
denetleyicide:
- Rolün
Administrator
veya rolünPowerUser
üyeleri denetleyiciye ve eylemeSetTime
erişebilir. - Eyleme
Administrator
yalnızca rolünShutDown
üyeleri erişebilir.
Bir denetleyici güvenli hale getirilebilir ancak tek tek eylemlere anonim, kimliği doğrulanmamış erişime izin verebilir:
[Authorize]
public class Control3PanelController : Controller
{
public IActionResult SetTime() =>
Content("[Authorize]");
[AllowAnonymous]
public IActionResult Login() =>
Content("[AllowAnonymous]");
}
Sayfalar için Razor , [Authorize]
aşağıdakilerden biri tarafından uygulanabilir:
- Kural kullanma veya
-
[Authorize]
örneğinePageModel
uygulama:
[Authorize(Policy = "RequireAdministratorRole")]
public class UpdateModel : PageModel
{
public IActionResult OnPost() =>
Content("OnPost RequireAdministratorRole");
}
Önemli
dahil olmak üzere AuthorizeAttribute
filtre öznitelikleri yalnızca PageModel'e uygulanabilir ve belirli sayfa işleyici yöntemlerine uygulanamaz.
İlke tabanlı rol denetimleri
Rol gereksinimleri, bir geliştiricinin Yetkilendirme hizmeti yapılandırmasının bir parçası olarak uygulama başlangıcında ilkeyi kaydettirdiği İlke söz dizimi kullanılarak da ifade edilebilir. Bu genellikle dosyada Program.cs
oluşur:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("RequireAdministratorRole",
policy => policy.RequireRole("Administrator"));
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseAuthentication();
app.UseAuthorization();
app.MapDefaultControllerRoute();
app.MapRazorPages();
app.Run();
İlkeler özniteliğindeki Policy[Authorize]
özelliği kullanılarak uygulanır:
[Authorize(Policy = "RequireAdministratorRole")]
public IActionResult Shutdown()
{
return View();
}
Bir gereksinimde izin verilen birden çok rol belirtmek için bunları yöntemine RequireRole parametre olarak belirtin:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("ElevatedRights", policy =>
policy.RequireRole("Administrator", "PowerUser", "BackupAdministrator"));
});
var app = builder.Build();
Yukarıdaki kod, öğesine Administrator
veya PowerUser
rollerine BackupAdministrator
ait olan kullanıcıları yetkiler.
Bir kimlik oluşturulduğunda bir veya daha fazla role ait olabilir. Örneğin, Tracy Yönetici ve Kullanıcı rollerine aitken Scott yalnızca Kullanıcı rolüne ait olabilir. Bu rollerin nasıl oluşturulduğu ve yönetilme şekli yetkilendirme işleminin yedekleme deposuna bağlıdır. Roller, sınıfındaki yöntemi aracılığıyla geliştiriciye IsInRoleClaimsPrincipal sunulur.
Rolleri talep olarak değil, talep olarak kullanmanızı öneririz. Tek Sayfalı Uygulamalar (SPA' lar) kullanırken bkzIdentity için Web API arka ucu güvenliğini sağlamak için kullanma.
Rol denetimleri ekleme
Rol tabanlı yetkilendirme denetimleri:
- Bildirim temellidir.
- Bir denetleyici içindeki Sayfalara Razor , denetleyicilere veya eylemlere uygulanır.
- Sayfa işleyici düzeyinde uygulanamıyorRazor, Sayfaya uygulanmalıdır.
Rol tabanlı yetkilendirme denetimleri, istenen kaynağa erişmek için geçerli kullanıcının hangi rollere üye olması gerektiğini belirtir.
Örneğin, aşağıdaki kod üzerindeki AdministrationController
tüm eylemlere erişimi rolün Administrator
üyesi olan kullanıcılarla sınırlar:
[Authorize(Roles = "Administrator")]
public class AdministrationController : Controller
{
public IActionResult Index() =>
Content("Administrator");
}
Birden çok rol virgülle ayrılmış liste olarak belirtilebilir:
[Authorize(Roles = "HRManager,Finance")]
public class SalaryController : Controller
{
public IActionResult Payslip() =>
Content("HRManager || Finance");
}
Denetleyiciye SalaryController
yalnızca rolün veya HRManager
üyesi olan kullanıcılar erişebilir.
Birden çok öznitelik uygularsanız, erişen bir kullanıcı belirtilen tüm rollerin üyesi olmalıdır. Aşağıdaki örnek, bir kullanıcının hem hem PowerUser
de rolünün ControlPanelUser
üyesi olmasını gerektirir:
[Authorize(Roles = "PowerUser")]
[Authorize(Roles = "ControlPanelUser")]
public class ControlPanelController : Controller
{
public IActionResult Index() =>
Content("PowerUser && ControlPanelUser");
}
Eylem düzeyinde ek rol yetkilendirme öznitelikleri uygulayarak erişimi daha fazla sınırlayabilirsiniz:
[Authorize(Roles = "Administrator, PowerUser")]
public class ControlAllPanelController : Controller
{
public IActionResult SetTime() =>
Content("Administrator || PowerUser");
[Authorize(Roles = "Administrator")]
public IActionResult ShutDown() =>
Content("Administrator only");
}
Denetleyici ve eylem düzeylerinde birden çok öznitelik uygulanırsa, erişim verilmeden önce tüm özniteliklerin geçmesi gerekir:
[Authorize(Roles = "Administrator")]
public class ControlAllPanelController2 : Controller
{
public IActionResult SetTime() =>
Content("Administrator only");
[Authorize(Roles = "PowerUser")]
public IActionResult ShutDown() =>
Content("Administrator && PowerUser");
}
Önceki ControlAllPanelController
denetleyicide:
-
Administrator
rolünün üyeleri denetleyiciye veSetTime
eylemine erişebilir. -
ShutDown
eylemine yalnızcaAdministrator
vePowerUser
rolü üyeleri erişebilir.
Ayrıca bir denetleyiciyi kilitleyebilir ancak tek tek eylemlere anonim, kimliği doğrulanmamış erişime izin vekleyebilirsiniz.
[Authorize]
public class Control3PanelController : Controller
{
public IActionResult SetTime() =>
Content("[Authorize]");
[AllowAnonymous]
public IActionResult Login() =>
Content("[AllowAnonymous]");
}
Sayfalar için Razor , [Authorize]
aşağıdakilerden biri tarafından uygulanabilir:
- Kural kullanma veya
-
[Authorize]
örneğinePageModel
uygulama:
[Authorize(Policy = "RequireAdministratorRole")]
public class UpdateModel : PageModel
{
public ActionResult OnPost()
{
}
}
Önemli
dahil olmak üzere AuthorizeAttribute
filtre öznitelikleri yalnızca PageModel'e uygulanabilir ve belirli sayfa işleyici yöntemlerine uygulanamaz.
İlke tabanlı rol denetimleri
Rol gereksinimleri, geliştiricinin yetkilendirme hizmeti yapılandırmasının bir parçası olarak başlangıçta ilkeyi kaydettirdiği yeni İlke söz dizimi kullanılarak da ifade edilebilir. Bu normalde dosyanızda ConfigureServices()
oluşurStartup.cs
.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthorization(options =>
{
options.AddPolicy("RequireAdministratorRole",
policy => policy.RequireRole("Administrator"));
});
}
İlkeler özniteliğindeki Policy
[Authorize]
özelliği kullanılarak uygulanır:
[Authorize(Policy = "RequireAdministratorRole")]
public IActionResult Shutdown()
{
return View();
}
Bir gereksinimde izin verilen birden çok rol belirtmek istiyorsanız, bunları yöntemine RequireRole
parametre olarak belirtebilirsiniz:
options.AddPolicy("ElevatedRights", policy =>
policy.RequireRole("Administrator", "PowerUser", "BackupAdministrator"));
Bu örnek, veya Administrator
PowerUser
rollerine BackupAdministrator
ait olan kullanıcıları yetkiler.
'a Rol hizmetleri ekleme Identity
Rol hizmetlerini eklemek için ekle AddRoles :
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddControllersWithViews();
services.AddRazorPages();
}
ASP.NET Core