【问题标题】:MVC 5 Authorize AttributeMVC 5 授权属性
【发布时间】:2017-06-15 14:33:53
【问题描述】:

我正在为 ASP.NET 使用 MVC 5。

我正在尝试创建自定义授权属性。使用 OpenId 并且如果存在会话变量,用户将通过我的应用程序进行身份验证。我已将 [OpenIdAuthorize] 添加到我的控制器中。当我在登录后查看它们时,我会在我的应用程序中弹回 /openid/index。会话变量存在。我添加了断点,但它们从未到达。

public class OpenIdAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext.Session["FriendlyEmail"] == null)
            return false;
        else
            return true;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if(filterContext.HttpContext.Session["FriendlyEmail"] == null)
            filterContext.Result = new RedirectResult("/openid/index");
    }
}

这是我的控制器:

[OpenIdAuthorize]
public class RuleSetController : Controller

【问题讨论】:

  • 你覆盖AuthorizeCore函数吗?
  • 请看我更新的答案。问题依然存在。
  • AuthorizeCore 函数上的断点是否被命中?
  • 正常的AuthorizeAttribute 是否仍然有效?它可能已作为全局过滤器添加到 FilterConfig?
  • 当我将它添加到过滤器配置时,代码会运行。一旦用户访问我的应用程序,它就会尝试重定向它们。我可以添加代码以在某些页面上进行授权吗?

标签: c# asp.net asp.net-mvc


【解决方案1】:

这是我的解决方案:

  1. 不要在 filter.config 中输入任何内容。
  2. 在 web.config 中,输入以下代码:(参见身份验证模式 > 表单https://support.microsoft.com/en-us/help/301240/how-to-implement-forms-based-authentication-in-your-asp.net-application-by-using-c-.net
  3. 调整 AuthorizeAttribute 以仅覆盖 AuthorizeCore。不覆盖其他方法。

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if (httpContext.Session["FriendlyEmail"] == null)
            return false;
        else
            return true;
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多