为什么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
。目前,这会重定向到错误页面。
当然我不必这样做?
当年话下
侃侃无极