在“旧”ASP.NET中,我可以构建一个自定义的授权属性并覆盖HandleUnauthorizedRequest。我似乎不能使用自定义授权处理程序来使用ASP.NET核心来完成这个任务。后者要么是“成功”,要么是“失败”,我想根据失败的性质,转向其他控制器的行动。
这里是一个场景。我的web应用程序的用户声称他们是“活动”用户,即他们已经完全注册,我们已经验证了他们的详细信息等等。新用户已经使用OpenIdConnect中间件进行了身份验证,但在我们完全验证和设置他们的帐户之前,他们没有"active“用户声明。因此,已经对新用户和活动用户进行了身份验证。我希望防止新用户访问大部分应用程序。每次他们试图到达https://app.example.com/dashboard时,我都想将他们重定向到一个https://app.example.com/newuser页面,他们可以从该页面进行设置过程。
--我可以在控制器上使用授权策略来检查是否存在“活动”用户声明并允许访问。当一个新用户没有这个声明,并且授权失败时,我希望授权处理程序有一些逻辑,然后将他们重定向到他们可以访问的应用程序的某个区域。但是我不知道如何使用ASPNET核心中的授权框架来实现这一点。
有一个有点笨重的解决方案,它使用CookieMiddleware并为OnRedirectToAccessDenied事件实现了一个处理程序--参见https://github.com/aspnet/Mvc/issues/4890。我还考虑过实现一个动作过滤器,它可以在每个请求上运行。
我只是在这里太蠢了吗?当然,想要对授权失败执行一些操作是有意义的,这不仅是为了让用户重新进行身份验证。
发布于 2017-08-05 16:37:51
经过一些挖掘和参考的精彩书,临ASP.NET核心MVC (第6版,亚当弗里曼),我的问题的简单答案是创建一个授权过滤器。它使用单个方法实现IAuthorizationFilter ( OnAuthorization(AuthorizationFilterContext上下文))。在这个方法中,做任何您需要做的检查请求。如果授权失败,只需将context.Result属性设置为某些IActionResult,在我的示例中是RedirectToActionResult。如果请求通过授权,则什么也不做。
您也可以在过滤器中使用依赖注入--太棒了。
没有提到如何在Microsoft ASP.NET文档站点上为ASP.NET实现或编写示例。感谢亚当·弗里曼。
https://stackoverflow.com/questions/45509612
复制相似问题