我应该在基于DDD的体系结构(洋葱架构)中散列我的密码?

时间:2012-08-03 16:10:39

标签: asp.net-mvc-3 passwords domain-driven-design onion-architecture

我正在尝试找出在我的架构中散列身份验证密码的最佳位置。这是我的请求流程:

MVC3->MembershipProvider->AccountService->UserRepository->NHibernate->Database

我在服务级别的哈希与存储库级别之间徘徊。我看到两者都有优势,但有谁知道这个标准的地方照顾这个?我将哈希密码存储在数据库中。

2 个答案:

答案 0 :(得分:6)

DDD不是顶级架构。您可以在有界的上下文中应用它。系统中可能存在许多有界的上下文,其中一些是DDD,有些则不是。

无论您的核心域是什么,身份验证都不属于它。它充其量只是一个通用域,已经解决了问题。这应该仅存在于应用程序层 - 这就是GUI如何保护对域的访问。没有花哨的DDD构建块。没有存储库,没有服务。只需让您的会员提供者直接与NHibernate对话,甚至是原始的ADO.NET。或许你不需要定制的。 SqlMembershipProvider不适合您的需求吗?

答案 1 :(得分:0)

如果我们严格地谈论DDD(域驱动设计),那么密码哈希应由用户(域实体或聚合根)处理。将用户输入(密码)从控制器传递到AccountService,让AccountService加载/创建新用户并在用户上调用将散列密码的方法。如果您需要一个示例,请查看此网址:Example of User in MVC3 app