gpt4 book ai didi

c# - 有没有人对 [Authorize] 属性如何处理标准 ASP.NET MVC 5 应用程序中的路由有很好的解释?

转载 作者:太空狗 更新时间:2023-10-30 00:39:48 25 4
gpt4 key购买 nike

如你所见from my previous post ,我在使用 MVC 5 的 [Authorize] 属性时遇到了很多困难。隔壁商店的开发团队无法弄清楚为什么我在 Frameworks 4.5.2、4.5.3 或 4.6 中创建的每个新项目中属性总是失败(失败,我的意思是用属性装饰一个 Action 方法将自动将所有用户(无论是否已授权)重定向到 401 页面)。我的新标准做法是在我构建的每个成员(member)系统中创建一个继承自 AuthorizeAttribute 的自定义属性,但这显然并不理想。

MSDN 没有任何基于代码的解释说明该属性实际上如何将未经授权的用户重新路由到登录页面(预期行为),这是确定真正的错误是否存在于我的代码库中所需的关键洞察力,或者是 IIS 主机设置中的一个怪癖。有谁能够一劳永逸地白盒这个属性吗?

最佳答案

请记住,身份验证和授权在您的应用程序中是分开的。

基本上你需要实现一个 IAuthenticationFilter

看看 MVC5 管道 http://www.dotnet-tricks.com/Tutorial/mvc/LYHK270114-Detailed-ASP.NET-MVC-Pipeline.html - 自 MVC4 Pipeline 以来发生了一些变化
(来源:dotnet-tricks.com)

最重要的是引入了身份验证过滤器。以前他们将身份验证和授权处理合并到 [Authorize] 过滤器中,现在他们已经正确地将这些问题分开。

James Chambers 发表了一篇不错的文章,应该可以很好地概述这些过滤器在请求的生命周期中的行为方式:http://jameschambers.com/2013/11/working-with-iauthenticationfilter-in-the-mvc-5-framework/

抛出 UnAuthorized 结果应该可以做到:

public void OnAuthentication(AuthenticationContext filterContext)
{
if (!filterContext.Principal.Identity.IsAuthenticated)
filterContext.Result = new HttpUnauthorizedResult();
}

在 MVC 应用程序中,默认的身份验证机制是表单,为此我们的项目中添加了一个默认的帐户 Controller 和相应的 View 。因此,通过简单地让用户“掉线”,他们将最终到达登录页面。

希望对您有所帮助:)

关于c# - 有没有人对 [Authorize] 属性如何处理标准 ASP.NET MVC 5 应用程序中的路由有很好的解释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33106210/

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