通过创建授权属性的子类来创建自定义授权属性是否安全

时间:2014-10-22 13:44:07

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-5 authorize-attribute

我读过一篇关于asp.net mvc安全性的文章。并且它提到创建自定义授权的更安全的方法是创建AuthorizeAttribute的子类,因为覆盖AuthorizeCore方法,将确保我受益于AuthorizeAttribute内置的功能,我不需要担心细节安全性实施或从头开始创造每件事。如下: -

public class CustomAuthAttribute : AuthorizeAttribute {
  private bool localAllowed;
  public CustomAuthAttribute(bool allowedParam) {
  localAllowed = allowedParam;
 }
protected override bool AuthorizeCore(HttpContextBase httpContext)
 {
   if (httpContext.Request.IsLocal) {
    return localAllowed;
  } 
else {
   return true;

假设我将CustomAuth属性而不是defualt [Authorize]属性添加到我的操作方法中。所以任何人都可以提出以下建议: -

  1. 根据web.config设置,如果请求未经过身份验证,我的自定义授权属性会将用户重定向到登录页面。或者我将失去这个功能。

  2. 是否有必要检查请求是否在自定义授权属性中进行了身份验证,如下所示: -

    if(!httpContext.Request.IsAuthenticated)      return false;

  3. 或者这是由defualt处理的?

    1. 我仍然可以使用用户,角色并使用自定义授权属性传递它们。
    2. 有人可以就此提出建议吗? 感谢

1 个答案:

答案 0 :(得分:1)

我也使用派生的AuthorizeAttribute来处理基类没有的某些情况。代码段中的问题是您没有调用基本功能。因此,在AuthorizeCore中,您需要致电base.AuthorizeCore(httpContext);而不是检查httpContext.Request.IsAuthenticated,除非您想彻底改变此行为(您的第二个问题)。也许this example有帮助。

回答您的第一个问题:是的,只要您不从基类覆盖此功能。

问题3:据我所知,只要你不重写它,你的派生属性就和基数完全相同。但是,对于“传递用户和角色”,您究竟是什么意思?