【问题标题】:On Which Tier should user authentication should exist in n-tier websiten 层网站中应该存在用户身份验证的层
【发布时间】:2015-06-19 23:08:38
【问题描述】:

我浏览了不同的建筑书籍,例如这本:Microsoft Application Architecture Guide, 2nd Edition 现在我正在用 ASP.Net MVC 作为表示层构建一个新的 n 层网站。 我的问题是,如果我要使用asp.net Identity,我应该在哪个层/层上实现用户身份验证?

我认为它应该在横切关注点中,因为我将需要检查用户是否被授权或经过身份验证才能访问某些功能,而且我可能会在许多层上使用用户名,例如业务、服务和表示层.

还认为最好将其放在表示层中,因为表示层是 MVC,从那里处理 ASP 身份将很容易,并且允许我轻松地使用 [Authorize] 和 [AllowAnonymous] .

我知道这个问题的答案取决于许多其他因素,但我正在努力实现最佳实践,因此需要了解您的观点并进行讨论。

【问题讨论】:

  • 什么是横切层?我听说过横切关注点,但没有听说过具有该名称的特定层。
  • @Maarten 是的,我的意思是横切关注点或通用组件

标签: asp.net-mvc architecture asp.net-identity n-tier-architecture


【解决方案1】:

stackoverflow 上有很多类似的问题,答案也很多。这是我对此事的看法。

您必须将抽象与实现分开。

抽象(一个接口)定义了您需要能够向身份验证服务提出的问题。应用程序中将使用您的身份验证服务的所有其他部分都使用此接口。这意味着您的抽象必须定义在应用程序的其他部分可以引用的某个地方。我的建议是将其放在业务层中,因为接口中的方法(换句话说,“您想向服务提出的问题”)通常与业务相关。另一个建议是将它放在核心层中(如果有的话)。

剩下的就是接口的实现了。我会在你能做到的最简单的地方实现它。能不能在业务层做,很好。您是否需要使用 MVC 中的标识类,也很好,将它放在那里。你把它放在哪里并不重要,因为它不是直接使用的。

当然,要使这一切正常工作,您需要使用一点依赖注入来注册接口的实现。

【讨论】:

    【解决方案2】:

    我发现,如果您将身份验证与授权分开,这通常是一个非常简单的答案。身份验证总是不得不坐在演示文稿前面。它是表示层前面的一层。它真的必须是。

    在进行身份验证后,将经过身份验证的身份向下传递到其他层只是另一个模型对象,应该这样对待。将身份验证/授权绑定到所有不同的层作为横切关注点会使您的代码更难在不同的上下文中重用。也使得测试变得更加困难。

    【讨论】:

      猜你喜欢
      • 2021-10-10
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多