gpt4 book ai didi

asp.net-mvc - 禁止使用 [Authorize] 操作过滤器的 Controller 方法的浏览器身份验证登录对话框

转载 作者:行者123 更新时间:2023-12-03 20:26:09 25 4
gpt4 key购买 nike

我正在使用 Windows 身份验证创建 Intranet 站点。

也许我不是最好的方法,但我试图通过调用一个 Controller 方法来加载部分 View ,该方法包裹着一个 Authorize 操作过滤器,这样只有经过授权的个人才能看到页面的那部分.举例来说,我想将管理员工具加载到页面上,但前提是登录的个人是管理员。

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

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

Controller 将包含以下代码:
        [Authorize(Roles="Admins")]
public ActionResult LoadAdminTools()
{
return PartialView("_AdminToolsPartialView");
}

然后包含管理控件(或其他)的部分 View 将呈现到页面 - 只有如果登录用户是管理员角色的一部分。

我遇到的“问题”是,如果登录的人无权加载部分 View ,浏览器会弹出登录对话框,要求提供用户凭据。在不输入任何凭据的情况下关闭对话框会导致预期的结果 - 部分 View 不会加载,而页面的其余部分会加载。很酷,但很烦人。输入不正确的凭据,您会收到 401 错误 - 同样符合预期。

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

我的问题是这个 :有没有办法使用 [Authorize] 操作过滤器加载部分 View (或做任何事情,真的)而浏览器不要求用户登录?只需获取当前登录的凭据,检查它们是否符合操作过滤器,如果符合,则加载部分 View ,如果不符合,则不要。如果没有,是否有更好的方法来解决我想在这里完成的任务?

更新

美丽的。我阅读了您发布的问题的解决方案,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");
}

现在它加载页面就好了 浏览器登录对话框 - 当它是授权用户时有局部 View ,当它不是授权用户时没有局部 View =)

谢谢!

最佳答案

不幸的是,ASP.NET(以及 MVC)在可能的情况下将授权和身份验证混为一谈。

检查此问题以获取解决方案。

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

关于asp.net-mvc - 禁止使用 [Authorize] 操作过滤器的 Controller 方法的浏览器身份验证登录对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10421727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com