【问题标题】:Authorization in multiple layers多层授权
【发布时间】:2018-08-13 07:28:00
【问题描述】:

我正在使用 ASP.NET Core 和 MediatR 构建应用程序/Web API。

身份验证(Google 帐户)在 ASP.NET Core 中完成。控制器只创建一个薄层,将所有工作委托给 MediatR 及其请求处理程序。

关于授权,目前,我的方法是,如果用户已通过身份验证,我的大多数控制器都装饰有 [Authorize] 属性以及 MediatR 管道检查(通过行为)中的相应请求处理程序,因此存在重复性。

我的问题是,让所有控制器都允许匿名访问并且只检查 MediatR 管道中的身份验证/授权是否是一种不好的做法?

当然,我需要将它保存在请求处理程序中,因为它们正在形成实际的应用程序层,并且我希望它独立于 ASP.NET。也只测试了这一层。

【问题讨论】:

  • 如果你的代码只从控制器调用,为什么你需要 [Auth] 低层中的任何东西(例如 mediatr 处理程序)
  • 我这样做的原因:1. 我希望我的控制器尽可能薄 2. 我希望保留将我的应用程序层用于另一个基础架构的可能性
  • 有一个你可以使用的管道示例-lostechies.com/jimmybogard/2016/10/13/mediatr-pipeline-examples
  • 我已经在使用 MediatR 的管道了。我的问题是在 ASP.NET 控制器和 MediatR 管道上都这样做是否是“必要的”。在控制器上全部匿名是否被认为是一种不好的做法。
  • imo - 授权应该是控制器的关注点;但你想让控制器“瘦”——更重要的是在其他基础设施中重用 mediatr 处理程序,所以这完全是一个“取决于”的问题

标签: asp.net-web-api authorization mediatr


【解决方案1】:

我会将授权留给控制器,但这只是一个意见。

如果您打算在其他没有内置授权功能的项目中使用处理程序,请将它们留在处理程序中。

这是一个“视情况而定”的问题,因为它取决于您的具体情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多