AuthorizeCore不适用于自定义授权属性

时间:2017-06-15 11:27:05

标签: c# asp.net-mvc

我尝试在我的应用程序中使用自定义Authorize属性来处理来自客户端和管理员的请求。

我在不同的应用程序中使用了相同的方法,唯一的区别是身份验证类型。一个是基于Microsoft帐户,另一个是基于联合服务。

我在我的AuthorizationCore方法的覆盖中设置了一个断点,我的问题是,当用户第一次尝试访问该应用程序时,它只会被触发一次,然后它会将用户重定向到登录页面。在此之后它不再被解雇。我每次用户访问控制器/操作时都需要触发它,以便我们检查用户是否具有正确的角色,在我的理解中,这是Authorize属性的用途。

我的代码:

public class AuthorizeUserAttribute : AuthorizeAttribute
{
    /// <summary>
    /// The Role required by the Action or Controller
    /// </summary>
    public UserRole RequireRole { get; set; }

    /// <summary>
    /// Authorization Logic
    /// </summary>
    /// <param name="httpContext"></param>
    /// <returns></returns>
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {

        //Result = new AuthorizationResult();
        bool isAuthorized = base.AuthorizeCore(httpContext);

        if (isAuthorized)
        {
            using (ApplicationDbContext context = new ApplicationDbContext())
            {
                ApplicationUser user = context.ApplicationUsers.FirstOrDefault(u => u.EmailAddress.Equals(httpContext.User.Identity.Name, StringComparison.OrdinalIgnoreCase));
            }


            // ... Check if user has the required role
        }

        return isAuthorized;
    }

    /// <summary>
    /// Redirect the user
    /// </summary>
    /// <param name="filterContext"></param>
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        // Handle the request if the user does not have the required role

        base.HandleUnauthorizedRequest(filterContext);
    }
}

我使用如下属性

    [AuthorizeUser(RequireRole = Core.Models.Users.UserRole.User)]
    public ActionResult Index()
    {

        return View();
    }

任何帮助将不胜感激。 感谢

1 个答案:

答案 0 :(得分:1)

我觉得自己不得不承认这一次

我的代码工作正常,问题是身份验证提供程序在经过身份验证后将我重定向到我的https网站,我没有意识到的是重定向我的端口。它重定向到的端口是我的IIS中的测试应用程序,而不是我的IIS Express中的开发应用程序。卫生署!