【问题标题】:Using .NET membership provider throughout n-tier web app在整个 n 层 Web 应用程序中使用 .NET 成员资格提供程序
【发布时间】:2011-06-13 16:35:37
【问题描述】:

我目前正在构建一个 n 层 Web 应用程序,主要用于实践新技术和模式 - 存储库、uow、服务、ioc、ef4 和 mvc3。

经过大量拉扯后,我现在有 ef4 使用存储库通过我的服务层保存我的实体。

我现在开始在服务层定义我需要的方法,我认为现在是开始实施身份验证的好时机。通常我会推出自己的身份验证代码,但是朋友告诉我尝试使用 Membership Provider。

现在显然我将在 mvc3 网络应用程序中使用它,但我想知道我是否也可以在我的服务层中使用它?谁能指出我的任何文章或博客文章?

注意。抱歉,如果我说的是显而易见的,但我只是想明确一点,当我提到我的服务层时,我不是指 WCF;这些是我自己的尊重服务层模式的类 - http://martinfowler.com/eaaCatalog/serviceLayer.html。话虽如此,我可能希望以后通过 WCF 服务公开这个服务层。

我已经在谷歌上搜索了几个小时,但没有找到任何结果!

非常感谢任何帮助。

【问题讨论】:

    标签: .net membership-provider service-layer


    【解决方案1】:

    这是来自 Scott Mitchell 的 18 part series 文章。

    这是对 asp.net 中有关身份验证、授权和成员资格提供程序的所有功能的非常深入的解释。我从未从同一作者那里找到更好的资料来源。

    您可以通过使用存储库模式来隐藏实现,就像您现在使用 EF4 所做的那样,无需任何特定更改

    希望这会有所帮助!

    【讨论】:

    • 感谢该链接,但是您说我可以在我的存储库中实现身份验证。也许我错了,但这似乎不是身份验证驻留的正确位置 - 从 SoC 的角度考虑,存储库应该只负责实体上的 CRUD 操作。我认为身份验证的最佳位置是服务层(即应用程序逻辑所在的位置)以及如何将当前用户及其权限从 MVC Web 应用程序传递到服务层。我希望这是有道理的。我现在就开始阅读链接,谢谢!
    • 是的,这是有道理的。但是您始终可以使用Membership.GetUser(HttpContext.Current.User.Identity.Name) 根据当前身份名称获取用户。 ;)
    【解决方案2】:

    一种方法是创建一个“SecurityContext”类,其中包含用户名、远程 IP 地址等。然后创建一个代理类,作为 WCF 服务的代理类。在 Agent 类中,您可以使用静态类创建安全上下文。然后,您可以将此 SecurityContext 传递给所有需要安全性的服务方法上的其他层。这样就足够灵活地在前端进行身份验证和在域/业务逻辑层进行审计等。

    【讨论】:

      猜你喜欢
      • 2010-12-23
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 2012-03-01
      • 1970-01-01
      相关资源
      最近更新 更多