jca*_*ddy 6 asp.net asp.net-mvc
在"旧"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.我还想过实现一个在每个请求上运行的动作过滤器.
我只是在这里傻吗?当然,想要对授权失败执行某些操作是有意义的,这不仅会让用户重新进行身份验证.
经过一番挖掘和参考这本精彩的书,Pro ASP.NET Core MVC(第6版,Adam Freeman),我的问题的简单答案是创建一个授权过滤器.这使用单个方法OnAuthorization(AuthorizationFilterContext context)实现IAuthorizationFilter.在此方法中,执行检查请求所需的任何操作.如果授权失败,只需将context.Result属性设置为某些IActionResult,在我的案例中为RedirectToActionResult.如果请求通过授权什么都不做.
您还可以在过滤器中使用依赖注入 - 太棒了.
没有提及如何在Microsoft ASP.NET文档站点上实现或编码IAuthorizationFilter的示例.感谢Adam Freeman.
| 归档时间: |
|
| 查看次数: |
1491 次 |
| 最近记录: |