Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
När en identitet skapas kan den tilldelas ett eller flera anspråk som utfärdats av en betrodd part. Ett anspråk är ett namnvärdepar som representerar vad ämnet är, inte vad ämnet kan göra. Du kan till exempel ha ett körkort som utfärdats av en lokal körkortsmyndighet. Ditt körkort har ditt födelsedatum på sig. I det här fallet skulle anspråksnamnet vara DateOfBirth, anspråksvärdet skulle vara ditt födelsedatum, till exempel 8th June 1970 och utfärdaren skulle vara utfärdaren av körkortet. Anspråksbaserad auktorisering kontrollerar som enklast värdet för ett anspråk och ger åtkomst till en resurs baserat på det värdet. Om du till exempel vill ha åtkomst till en nattklubb kan auktoriseringsprocessen vara:
Dörrsäkerhetstjänstemannen utvärderar värdet på ditt födelsedatum och om de litar på utfärdaren (körkortsutfärdaren) innan du beviljas åtkomst.
En identitet kan innehålla flera anspråk med flera värden och kan innehålla flera anspråk av samma typ.
Lägga till anspråkskontroller
Anspråksbaserade auktoriseringskontroller:
- Är deklarativa.
- Tillämpas på Razor sidor, kontroller eller åtgärder i en kontroller.
- Kan inte tillämpas på Razor sidhanterarnivå; de måste tillämpas på sidan.
Anspråk i kod anger anspråk som den aktuella användaren måste ha, och valfritt det värde som anspråket måste innehålla för att få åtkomst till den begärda resursen. Anspråkskrav är principbaserade. utvecklaren måste skapa och registrera en princip som uttrycker anspråkskraven.
Den enklaste typen av anspråksprincip söker efter förekomsten av ett anspråk och kontrollerar inte värdet.
Skapa och registrera policyn och anropa UseAuthorization. Registrering av principen sker som en del av konfigurationen av auktoriseringstjänsten, vanligtvis i Program.cs filen:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
});
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();
I det här fallet kontrollerar policyn om det finns ett krav på den aktuella identiteten.
Använd principen med hjälp av Policy egenskapen på [Authorize] attributet för att ange principnamnet.
[Authorize(Policy = "EmployeeOnly")]
public IActionResult VacationBalance()
{
return View();
}
Attributet [Authorize] kan tillämpas på en hel kontrollant eller Razor sida, i vilket fall endast identiteter som matchar principen tillåts åtkomst till alla åtgärder på kontrollanten.
[Authorize(Policy = "EmployeeOnly")]
public class VacationController : Controller
{
public IActionResult Index()
{
return View();
}
public ActionResult VacationBalance()
{
return View();
}
[AllowAnonymous]
public ActionResult VacationPolicy()
{
return View();
}
}
Följande kod tillämpar [Authorize]-attributet till en Razor-sida:
[Authorize(Policy = "EmployeeOnly")]
public class IndexModel : PageModel
{
public void OnGet()
{
}
}
Principer kan inte tillämpas på Razor sidhanterarnivå. De måste tillämpas på sidan.
Om du har en kontrollant som skyddas av [Authorize] attributet men vill tillåta anonym åtkomst till vissa åtgärder använder du attributet AllowAnonymousAttribute .
[Authorize(Policy = "EmployeeOnly")]
public class VacationController : Controller
{
public IActionResult Index()
{
return View();
}
public ActionResult VacationBalance()
{
return View();
}
[AllowAnonymous]
public ActionResult VacationPolicy()
{
return View();
}
}
Eftersom principer inte kan tillämpas på Razor sidhanterarnivå rekommenderar vi att du använder en kontrollant när principer måste tillämpas på sidhanterarnivå. Resten av appen som inte kräver principer på Razor sidhanterarnivå kan använda Razor Sidor.
De flesta anspråk har ett värde. Du kan ange en lista över tillåtna värden när du skapar principen. Följande exempel skulle endast lyckas för anställda vars personalnummer var 1, 2, 3, 4 eller 5.
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddControllersWithViews();
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("Founders", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
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();
Lägga till en allmän anspråkskontroll
Om anspråksvärdet inte är ett enda värde eller om en transformering krävs använder du RequireAssertion. Mer information finns i Använda en func för att uppfylla en princip.
Utvärdering av flera principer
Om flera principer tillämpas på kontrollant- och åtgärdsnivåer måste alla principer passera innan åtkomst beviljas:
[Authorize(Policy = "EmployeeOnly")]
public class SalaryController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult Payslip()
{
return View();
}
[Authorize(Policy = "HumanResources")]
public IActionResult UpdateSalary()
{
return View();
}
}
I föregående exempel kan varje identitet som uppfyller principen EmployeeOnly komma åt åtgärden Payslip eftersom den principen tillämpas på kontrollern. Men för att kunna anropa UpdateSalary åtgärden måste identiteten uppfylla bådeEmployeeOnly principen och HumanResources principen.
Om du vill ha mer komplicerade regler, till exempel att ta ett födelsetidskrav, beräkna en ålder från detta och sedan kontrollera att åldern är 21 år eller äldre, måste du skriva anpassade policyhanterare.
I följande exempel måste båda sidhanterarmetoderna uppfylla EmployeeOnly principen och HumanResources principen:
[Authorize(Policy = "EmployeeOnly")]
[Authorize(Policy = "HumanResources")]
public class SalaryModel : PageModel
{
public ContentResult OnGetPayStub()
{
return Content("OnGetPayStub");
}
public ContentResult OnGetSalary()
{
return Content("OnGetSalary");
}
}
När en identitet skapas kan den tilldelas ett eller flera anspråk som utfärdats av en betrodd part. Ett anspråk är ett namnvärdepar som representerar vad ämnet är, inte vad ämnet kan göra. Du kan till exempel ha ett körkort som utfärdats av en lokal körkortsmyndighet. Ditt körkort har ditt födelsedatum på sig. I det här fallet skulle anspråksnamnet vara DateOfBirth, anspråksvärdet skulle vara ditt födelsedatum, till exempel 8th June 1970 och utfärdaren skulle vara utfärdaren av körkortet. Anspråksbaserad auktorisering kontrollerar som enklast värdet för ett anspråk och ger åtkomst till en resurs baserat på det värdet. Om du till exempel vill ha åtkomst till en nattklubb kan auktoriseringsprocessen vara:
Säkerhetsvakten vid dörren skulle utvärdera värdet av ditt födelsedatumpåstående och om de litar på den utfärdande myndigheten (körkortsmyndigheten) innan de beviljar dig åtkomst.
En identitet kan innehålla flera anspråk med flera värden och kan innehålla flera anspråk av samma typ.
Lägga till anspråkskontroller
Anspråksbaserade auktoriseringskontroller är deklarativa – utvecklaren bäddar in dem i sin kod, mot en kontrollant eller en åtgärd inom en kontrollant, anger anspråk som den aktuella användaren måste ha och valfritt det värde som anspråket måste innehålla för att få åtkomst till den begärda resursen. Anspråkskraven är principbaserade, utvecklaren måste skapa och registrera en princip som uttrycker anspråkskraven.
Den enklaste typen av anspråksprincip söker efter förekomsten av ett anspråk och kontrollerar inte värdet.
Skapa och registrera principen. Detta sker som en del av konfigurationen av auktoriseringstjänsten, som normalt sker i ConfigureServices() i din Startup.cs-fil.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
});
}
Ring UseAuthorization in Configure. Följande kod genereras av ASP.NET Core-webbappmallar:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
I det här fallet kontrollerar EmployeeOnly policyn för förekomsten av ett EmployeeNumber anspråk på den aktuella identiteten.
Sedan tillämpar du principen med egenskapen Policy på [Authorize] attributet för att ange principnamnet.
[Authorize(Policy = "EmployeeOnly")]
public IActionResult VacationBalance()
{
return View();
}
Attributet [Authorize] kan tillämpas på en hel kontrollant. I den här instansen får endast identiteter som matchar principen åtkomst till alla åtgärder på kontrollanten.
[Authorize(Policy = "EmployeeOnly")]
public class VacationController : Controller
{
public ActionResult VacationBalance()
{
}
}
Om du har en kontrollant som skyddas av [Authorize] attributet men vill tillåta anonym åtkomst till vissa åtgärder använder du attributet AllowAnonymousAttribute .
[Authorize(Policy = "EmployeeOnly")]
public class VacationController : Controller
{
public ActionResult VacationBalance()
{
}
[AllowAnonymous]
public ActionResult VacationPolicy()
{
}
}
De flesta anspråk har ett värde. Du kan ange en lista över tillåtna värden när du skapar principen. Följande exempel skulle endast lyckas för anställda vars personalnummer var 1, 2, 3, 4 eller 5.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthorization(options =>
{
options.AddPolicy("Founders", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
}
Lägga till en allmän anspråkskontroll
Om anspråksvärdet inte är ett enda värde eller om en transformering krävs använder du RequireAssertion. Mer information finns i Använda en func för att uppfylla en princip.
Utvärdering av flera principer
Om du tillämpar flera principer på en kontroller eller åtgärd måste alla principer vara uppfyllda innan åtkomst beviljas. Till exempel:
[Authorize(Policy = "EmployeeOnly")]
public class SalaryController : Controller
{
public ActionResult Payslip()
{
}
[Authorize(Policy = "HumanResources")]
public ActionResult UpdateSalary()
{
}
}
I exemplet ovan kan alla identiteter som uppfyller EmployeeOnly policyn komma åt Payslip åtgärden eftersom policyn tillämpas på kontrollern. Men för att kunna anropa UpdateSalary åtgärden måste identiteten uppfylla bådeEmployeeOnly principen och HumanResources principen.
Om du vill ha mer komplicerade policyer, till exempel att ta ett krav på födelsedatum, beräkna en ålder från den, och att kontrollera att åldern är 21 år eller äldre, måste du skriva anpassade policyhanterare.
När en identitet skapas kan den tilldelas ett eller flera anspråk som utfärdats av en betrodd part. Ett anspråk är ett namnvärdepar som representerar vad ämnet är, inte vad ämnet kan göra. Du kan till exempel ha ett körkort som utfärdats av en lokal körkortsmyndighet. Ditt körkort har ditt födelsedatum på sig. I det här fallet skulle anspråksnamnet vara DateOfBirth, anspråksvärdet skulle vara ditt födelsedatum, till exempel 8th June 1970 och utfärdaren skulle vara utfärdaren av körkortet. Anspråksbaserad auktorisering kontrollerar som enklast värdet för ett anspråk och ger åtkomst till en resurs baserat på det värdet. Om du till exempel vill ha åtkomst till en nattklubb kan auktoriseringsprocessen vara:
Dörrsäkerhetstjänstemannen utvärderar värdet på ditt födelsedatum och om de litar på utfärdaren (körkortsutfärdaren) innan du beviljas åtkomst.
En identitet kan innehålla flera anspråk med flera värden och kan innehålla flera anspråk av samma typ.
Lägga till anspråkskontroller
Anspråksbaserade auktoriseringskontroller är deklarativa – utvecklaren bäddar in dem i sin kod, mot en kontrollant eller en åtgärd inom en kontrollant, anger anspråk som den aktuella användaren måste ha och valfritt det värde som anspråket måste innehålla för att få åtkomst till den begärda resursen. Anspråkskraven är principbaserade, utvecklaren måste skapa och registrera en princip som uttrycker anspråkskraven.
Den enklaste typen av anspråksprincip söker efter förekomsten av ett anspråk och kontrollerar inte värdet.
Skapa och registrera principen. Detta sker som en del av konfigurationen av auktoriseringstjänsten, som normalt ingår i ConfigureServices() i filen Startup.cs.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthorization(options =>
{
options.AddPolicy("EmployeeOnly", policy => policy.RequireClaim("EmployeeNumber"));
});
}
I det här fallet kontrollerar policyn om det finns ett krav på den aktuella identiteten.
Sedan tillämpar du principen med egenskapen Policy på [Authorize] attributet för att ange principnamnet.
[Authorize(Policy = "EmployeeOnly")]
public IActionResult VacationBalance()
{
return View();
}
Attributet [Authorize] kan tillämpas på en hel kontrollant. I den här instansen får endast identiteter som matchar principen åtkomst till alla åtgärder på kontrollanten.
[Authorize(Policy = "EmployeeOnly")]
public class VacationController : Controller
{
public ActionResult VacationBalance()
{
}
}
Om du har en kontrollant som skyddas av [Authorize] attributet men vill tillåta anonym åtkomst till vissa åtgärder använder du attributet AllowAnonymousAttribute .
[Authorize(Policy = "EmployeeOnly")]
public class VacationController : Controller
{
public ActionResult VacationBalance()
{
}
[AllowAnonymous]
public ActionResult VacationPolicy()
{
}
}
De flesta anspråk har ett värde. Du kan ange en lista över tillåtna värden när du skapar principen. Följande exempel skulle endast lyckas för anställda vars personalnummer var 1, 2, 3, 4 eller 5.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddRazorPages();
services.AddAuthorization(options =>
{
options.AddPolicy("Founders", policy =>
policy.RequireClaim("EmployeeNumber", "1", "2", "3", "4", "5"));
});
}
Lägga till en allmän anspråkskontroll
Om anspråksvärdet inte är ett enda värde eller om en transformering krävs använder du RequireAssertion. Mer information finns i Använda en func för att uppfylla en princip.
Utvärdering av flera principer
Om du tillämpar flera principer på en kontroller eller åtgärd måste alla principer vara uppfyllda innan åtkomst beviljas. Till exempel:
[Authorize(Policy = "EmployeeOnly")]
public class SalaryController : Controller
{
public ActionResult Payslip()
{
}
[Authorize(Policy = "HumanResources")]
public ActionResult UpdateSalary()
{
}
}
I exemplet ovan kan alla identiteter som uppfyller EmployeeOnly policyn komma åt Payslip åtgärden eftersom policyn tillämpas på kontrollern. Men för att kunna anropa UpdateSalary åtgärden måste identiteten uppfylla bådeEmployeeOnly principen och HumanResources principen.
Om du vill ha mer komplicerade policyer, till exempel att ta ett krav på födelsedatum, beräkna en ålder från den, och att kontrollera att åldern är 21 år eller äldre, måste du skriva anpassade policyhanterare.
ASP.NET Core