rle*_*ias 6 c# security asp.net-mvc
我已经实现了自己的自定义Authorize属性.
该属性既适用于控制器级别,也适用于操作级别.
这是我需要做的一个例子:
[ClaimsAuthorize(Roles = "AdvancedUsers")]
public class SecurityController : Controller
{
[ClaimsAuthorize(Roles = "Administrators")]
public ActionResult AdministrativeTask()
{
return View();
}
public ActionResult SomeOtherAction()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
目前,如果用户具有管理员角色但不具有AdvancedUsers角色,则他无法执行"管理任务".
即使用户未在控制器级别授权,如何更改此行为以在操作级别执行安全检查?
目前,我能想到的唯一解决方案是实现2个属性:一个用于保护控制器,另一个用于保护操作.然后我将使用Order属性首先在动作级别执行一个.
但是,如果可能的话,我更喜欢具有单个属性的解决方案.
使用内置[OverrideAuthorization]:
[ClaimsAuthorize(Roles = "AdvancedUsers")]
public class SecurityController : Controller
{
[OverrideAuthorization]
[ClaimsAuthorize(Roles = "Administrators")]
public ActionResult AdministrativeTask()
{
return View();
}
public ActionResult SomeOtherAction()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
OverrideAuthorization属性可用于 MVC 5(至少)及更高版本。一旦你装饰Action用它,也装点新Role,并且将接管效果Controller级别的角色。
要限制特定操作,您只需在处理这些操作的方法上使用授权属性即可。当您使用 Authorize 属性标记操作方法时,对该操作方法的访问仅限于经过身份验证和授权的用户。
//[ClaimsAuthorize(Roles = "AdvancedUsers")]
public class SecurityController : Controller
{
{
[ClaimsAuthorize(Roles ="Administrators", "Role2","Role3")]
public ActionResult AdministrativeTask()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以在控制器级别覆盖您的授权,创建一个新OverrideAuthorizeAttribute属性。
public class OverrideAuthorizeAttribute : AuthorizeAttribute {
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以使用此属性来覆盖您的控制器级别授权。
[ClaimsAuthorize(Roles = "AdvancedUsers")]
public class SecurityController : Controller
{
[ClaimsAuthorize(Roles = "Administrators")]
public ActionResult AdministrativeTask()
{
return View();
}
[OverrideAuthorizeAttribute(Roles ="xxxx")] // This role will override controller
//level authorization
public ActionResult SomeOtherAction()
{
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12187 次 |
| 最近记录: |