【问题标题】:Asp.net core authorization redirect to specified path on failureAsp.net 核心授权在失败时重定向到指定路径
【发布时间】:2017-08-04 14:41:14
【问题描述】:

在“旧”ASP.NET 中,我可以构建自定义授权属性并覆盖 HandleUnauthorizedRequest。我似乎无法使用自定义授权处理程序对 ASP.NET Core 执行此操作。后者“成功”或“失败”,我想根据失败的性质重定向到替代控制器操作。

场景如下。 我的网络应用程序的用户有一个声明,表明他们是“活跃”用户,即他们已经完全注册并且我们已经验证了他们的详细信息等。新用户已经过身份验证使用 OpenIdConnect 中间件,但在我们完全验证并设置他们的帐户之前,不要拥有“活动”用户声明。因此,新用户和活动用户都已通过身份验证。我想阻止新用户访问大部分应用程序。每次他们尝试访问 https://app.example.com/dashboard 时,我都想将他们重定向到 https://app.example.com/newuser 页面,他们可以从中完成设置过程。

我可以在我的控制器上使用授权策略来检查是否存在“活动”用户声明并允许访问。当新用户没有此声明并且授权失败时,我希望授权处理程序具有一些逻辑,然后将他们重定向到他们有权访问的应用程序区域。但是我看不到如何使用 ASPNET 核心中的授权框架来做到这一点。

有一个有点笨拙的解决方案,它使用 CookieMiddleware 并为 OnRedirectToAccessDenied 事件实现处理程序 - 请参阅 https://github.com/aspnet/Mvc/issues/4890。我还考虑过实现一个针对每个请求运行的操作过滤器。

我只是在这里愚蠢吗?当然,想要对授权失败执行一些操作是有意义的,而不仅仅是让用户重新进行身份验证。

【问题讨论】:

    标签: asp.net asp.net-mvc


    【解决方案1】:

    在深入了解并参考了这本精彩的书Pro ASP.NET Core MVC(第 6 版,Adam Freeman),我的问题的简单答案是创建一个授权过滤器。这使用单个方法 OnAuthorization(AuthorizationFilterContext context) 实现 IAuthorizationFilter。在这种方法中,做任何你需要做的事情来检查请求。如果授权失败,只需将 context.Result 属性设置为某个 IActionResult,在我的情况下为 RedirectToActionResult。如果请求通过授权,则什么也不做。

    您还可以在过滤器中使用依赖注入 - 太棒了。

    Microsoft ASP.NET 文档站点上没有提及如何为 IAuthorizationFilter 实现或编写示例代码。感谢亚当弗里曼。

    【讨论】:

      猜你喜欢
      • 2021-08-22
      • 1970-01-01
      • 2016-12-09
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-09
      相关资源
      最近更新 更多