2023年6月20日发(作者:)
e权限认证⼀、简单授权 Core 中的授权通过 AuthorizeAttribute 和其各种参数来控制。 在其页⾯中,通过
[Authorize] 属性应⽤于控制器、操作或 Razor 页⾯,限制对已通过⾝份验证的⽤户的访问。⽰例如下:[Authorize]
public class AccountController : Controller {
public ActionResult Login() {
}
public ActionResult Logout() { } }如果要对操作(⽽不是控制器)应⽤授权,请将属性应⽤于
AuthorizeAttribute 操作本⾝⽰例如下:public class AccountController : Controller {
public ActionResult Login() {
}
[Authorize]
public ActionResult Logout() {
}
}你还可以使⽤属性,以
AllowAnonymous 允许未通过⾝份验证的⽤户访问各个操作。 例如:[Authorize]
public class AccountController : Controller {
[AllowAnonymous]
public ActionResult Login() {
}
public ActionResult Logout() {
}
}⼆、基于⾓⾊的授权基于⾓⾊的授权检查是声明性 — 的,开发⼈员将其嵌⼊到代码中、控制器或控制器内的操作,指定当前⽤户必须是其成员的⾓⾊才能访问请求的资源。例如,以下代码将访问权限限制为属于⾓⾊成员的⽤户的任何操作:[Authorize(Roles = "Administrator")]
public class AdministrationController : Controller { }多⾓⾊可以定义如下:[Authorize(Roles = "HRManager,Finance")]
public class SalaryController : Controller { }如果应⽤多个属性,则访问⽤户必须是所有指定⾓⾊的成员;下⾯的⽰例要求⽤户必须是
PowerUser 和⾓⾊的成员
ControlPanelUser 。[Authorize(Roles = "PowerUser")][Authorize(Roles = "ControlPanelUser")]
public class ControlPanelController : Controller { }三、基于策略的授权基于策略的授权,其实就是要求⽤户必须满⾜指定的策略要求,这个策略⼀般都是⽤户的⼀些基本信息,如名字、⾓⾊或者其他,我们⾸先要在在配置函数中,添加⼀个策略如下:public void ConfigureServices(IServiceCollection services){ trollersWithViews(); orPages(); horization(options => { icy("EmployeeOnly", policy => eClaim("EmployeeNumber")); });}如以上代码,要求⽤户的claim信息中包含EmployeeNumber属性 var claims = new List
};那么在控制器中,只需要以下代码,并能实现对权限的控制[Authorize(Policy = "EmployeeOnly")]public IActionResult VacationBalance(){ return View();}基于策略的授权,policy函数具有以下⼀些常⽤的函数:AddAuthenticationSchemes(String[])
将指定的⾝份验证添加 schemes 到 AuthenticationSchemes 此实例的。AddRequirements(IAuthorizationRequirement[])
将指定的添加 requirements 到 Requirements 此实例的。Build()
AuthorizationPolicy根据此实例中的要求⽣成⼀个新的。Combine(AuthorizationPolicy)
将指定的合并 policy 到当前实例中。RequireAssertion(Func
将添加 AssertionRequirement 到当前实例中。RequireAssertion(Func
将添加 AssertionRequirement 到当前实例中。RequireAuthenticatedUser()
该实例强制对当前⽤户进⾏⾝份验证。RequireClaim(String)
要求当前⽤户具有指定的声明。RequireClaim(String, IEnumerable
这要求当前⽤户具有指定的声明,并且声明值必须是允许的值之⼀。RequireClaim(String, String[])
这要求当前⽤户具有指定的声明,并且声明值必须是允许的值之⼀。RequireRole(IEnumerable
该实例强制当前⽤户必须⾄少有⼀个指定的⾓⾊。RequireRole(String[])
该实例强制当前⽤户必须⾄少有⼀个指定的⾓⾊。RequireUserName(String)
强制当前⽤户与指定的名称匹配。除以上功能之外,⽤于可以⾃定义策略,实现对页⾯的授权,其定义策略的基本⽅法如下:1、实现IAuthorizationRequirement接⼝,定义⼀个策略规范using ization;public class MinimumAgeRequirement : IAuthorizationRequirement{ public int MinimumAge { get; } public MinimumAgeRequirement(int minimumAge) { MinimumAge = minimumAge; }}2、实现策略检查器,其负责对策略进⾏检查,以下代码请求⽤户年纪,并且进⾏策略⽐较,实现授权public class MinimumAgeHandler : AuthorizationHandler
== "").Value); int calculatedAge = - ; if (dateOfBirth > rs(-calculatedAge)) { calculatedAge--; } if (calculatedAge >= mAge) { d(requirement); } //TODO: Use the following if targeting a version of //.NET Framework older than 4.6: // return sult(0); return tedTask; }}3、在ConfigureServices中添加策略检查代码,如下所⽰:public void ConfigureServices(IServiceCollection services){ trollersWithViews(); orPages(); horization(options => { icy("AtLeast21", policy => (new MinimumAgeRequirement(21))); }); //添加⼀个可以注⼊的对象 gleton
通常,在使⽤ 基于策略的授权时,通过调⽤
icy 作为授权服务配置的⼀部分来注册策略。 在某些情况下,可能⽆法(或理想的) 以这种⽅式注册所有的授权策略。 在这些情况下,可以使⽤⾃定义
IAuthorizationPolicyProvider 来控制如何提供授权策略internal class MinimumAgePolicyProvider : IAuthorizationPolicyProvider{ const string POLICY_PREFIX = "MinimumAge"; // Policies are looked up by string name, so expect 'parameters' (like age) // to be embedded in the policy names. This is abstracted away from developers // by the more strongly-typed attributes derived from AuthorizeAttribute // (like [MinimumAgeAuthorize()] in this sample) public Task
发布者:admin,转转请注明出处:http://www.yc00.com/web/1687249363a6.html
评论列表(0条)