加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 禁止使用[授权]操作过滤器的控制器方法的浏览器

发布时间:2020-12-16 04:05:17 所属栏目:asp.Net 来源:网络整理
导读:我正在使用 Windows身份验证创建Intranet站点. 也许我不是最好的方式,但是我试图通过调用一个包含Authorize action过滤器的控制器方法来加载部分视图,这样只有经过授权的人才能看到页面的那一部分.比如说,我想在页面上加载管理员工具,但前提是登录的个人是管
我正在使用 Windows身份验证创建Intranet站点.

也许我不是最好的方式,但是我试图通过调用一个包含Authorize action过滤器的控制器方法来加载部分视图,这样只有经过授权的人才能看到页面的那一部分.比如说,我想在页面上加载管理员工具,但前提是登录的个人是管理员.

所以在index.cshtml页面上我可能有类似的东西:

@Html.Action("LoadAdminTools","ControllerName")

Controller将包含以下代码:

[Authorize(Roles="Admins")]
        public ActionResult LoadAdminTools()
        {
            return PartialView("_AdminToolsPartialView");
        }

然后,包含管理控件(或其他)的部分视图将呈现给页面 – 仅当登录用户是Admins角色的一部分时.

我遇到的“问题”是,如果登录的人无权加载部分视图,浏览器会弹出登录对话框,询问用户的凭据.关闭对话框而不输入任何凭据会导致预期的结果 – 部分视图不会在页面的其余部分加载时加载.很酷,但很烦人.输入错误的凭据,您会收到401错误 – 也正如预期的那样.

如果有帮助:在IIS中,禁用匿名身份验证,启用Windows身份验证.
在“安全设置 – 本地Intranet区域”下的“Internet选项”中选择“使用当前用户名和密码自动登录”.

我的问题是:有没有办法在没有浏览器要求用户登录的情况下使用[授权]操作过滤器加载部分视图(或者真的做任何事情)?只需要获取当前登录的凭据,检查它们是否符合操作过滤器,如果有,则加载部分视图,如果没有,则不要.如果没有,是否有更好的方式来实现我想在这里完成的工作?

UPDATE

美丽.我读了你发布的问题的解决方案,Mystere Man,在Controller的文件夹中创建了一个名为IntranetAuthorizeAttribute.cs的新类,抛出代码:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,Inherited = true,AllowMultiple = true)]
    public class IntranetAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
    {        
        protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext.Request.IsAuthenticated)
            {
                filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult(403);
            }
            else
            {
                base.HandleUnauthorizedRequest(filterContext);
            }
        }        
    }

用我的新IntranetAuthorize过滤器替换了Authorize过滤器:

[IntranetAuthorize(Roles="Admins")]
        public ActionResult LoadAdminTools()
        {
            return PartialView("_AdminToolsPartialView");
        }

现在它加载页面就好了,没有浏览器登录对话框 – 部分视图是授权用户,没有部分视图时不是授权用户=)

谢谢!

解决方法

不幸的是,ASP.NET(以及MVC)在可能的情况下混淆了授权和身份验证.

检查此问题以获得解决方案.

Why does AuthorizeAttribute redirect to the login page for authentication and authorization failures?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读