为什么AuthorizeAttribute会重定向到登录页面以进行身份​​验证和授权失败?

为什么AuthorizeAttribute会重定向到登录页面以进行身份验证和授权失败?

在ASP.NET MVC中,您可以使用如下标记控制器方法AuthorizeAttribute

[Authorize(Roles = "CanDeleteTags")]public void Delete(string tagName){
    // ...}

这意味着,如果当前登录的用户不在“CanDeleteTags”角色中,则永远不会调用控制器方法。

不幸的是,对于失败,AuthorizeAttribute返回HttpUnauthorizedResult,它总是返回HTTP状态代码401.这导致重定向到登录页面。

如果用户未登录,则这非常有意义。但是,如果用户登录但未处于所需角色,则将其发送回登录页面会很困惑。

似乎AuthorizeAttribute将身份验证和授权混为一谈。

这似乎是ASP.NET MVC的一个疏忽,或者我错过了什么?

我不得不做一个DemandRoleAttribute将两者分开的东西。当用户未经过身份验证时,它会返回HTTP 401,并将其发送到登录页面。当用户登录但未处于所需角色时,它会创建一个NotAuthorizedResult。目前,这会重定向到错误页面。

当然我不必这样做?


江户川乱折腾
浏览 792回答 3
3回答

当年话下

将其添加到您的Login Page_Load功能:// User was redirected here because of authorization section if (User.Identity != null && User.Identity.IsAuthenticated)     Response.Redirect("Unauthorized.aspx");当用户重定向到那里但已经登录时,它会显示未授权的页面。如果他们没有登录,则会显示登录页面。

侃侃无极

不幸的是,您正在处理ASP.NET表单身份验证的默认行为。这里讨论了一种解决方法(我还没试过):http://www.codeproject.com/KB/aspnet/Custon401Page.aspx(它不是特定于MVC)我认为在大多数情况下,最好的解决方案是在用户尝试到达之前限制对未经授权资源的访问。删除/删除可能将其带到此未授权页面的链接或按钮。在属性上有一个额外的参数来指定重定向未授权用户的位置可能会很好。但与此同时,我将AuthorizeAttribute视为一个安全网。
打开App,查看更多内容
随时随地看视频慕课网APP