我有一个超级简单的身份验证属性,即我尝试在ASP.NET MVC 5应用程序中实现,我有一些麻烦。我希望在全局中应用该属性,除了控制器内的特定操作(例如登录表单和主页)。

我试过用没有运气的[OverrideAuthentication]属性装饰动作。它给了我一个重定向循环错误,因为应用程序仍然在登录表单上运行身份验证,并继续尝试一遍又一遍地重定向到登录表格。

还有其他人看到这种行为吗?任何想法在这里填充了什么?

通过示例,我创建了一个当前未实现的超级简单过滤器:

public class BasicAuthenticationAttribute
    : ActionFilterAttribute, IAuthenticationFilter
{

    public void OnAuthentication(AuthenticationContext filterContext)
    {
        throw new NotImplementedException();
    }

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
    {
        throw new NotImplementedException();
    }
}
.

如果我像这样装饰我的控制器/动作:

[BasicAuthentication]
public class AccountController : Controller
{
    [HttpGet]
    [OverrideAuthentication]
    public ActionResult Login()
    {
        return View();
    }
}
.

当我导航到登录操作时,我得到了一个未实现的异常,即使该操作根本不应该运行身份验证码。我误解了覆盖应该如何工作吗?

有帮助吗?

解决方案

我认为您对授权(尽可能多的人)对认证困惑。制作[基本素静音IncicitionAttribute并在全球范围内注册它是否没有意义,因为才能在登录时发生身份验证,而不是每个请求。

授权是在用户登录以检查用户是否具有执行特定操作的特权,并且在全局授权使其有意义。MVC中的授权由[专制特列表]处理,如果需要自定义授权检查的方式,则可以继承它。您还可以将其注册为全局过滤器。

[allaNanonMousAttribute]与[专制特有]一起工作,基本上告诉它跳过授权检查。还应注意,除非它与[专制特拉西特]一起使用,否则[allowAnmonamousAttribute]将没有效果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top