我正在尝试将最近发布的 ASP.NET Identity 2.0.0 集成到一个 3 层 MVC 应用程序中。我不确定我是否朝着正确的方向前进。我可以看到两种方法。
在第一种方法中,我已经将身份集成到每个逻辑层中。有一些技术问题集成但仍在发展。
在第二种方法中,使用专用于安全的独立封装组件。
我目前采用了方法 1,但对这一切都提出了质疑。另外,还有其他方法可以采取吗?
方法一
Web
Startup.cs
/App_Start/Startup.Auth
/Controllers/Account
/Controllers/Manage
/Controllers/RolesAdmin
/Controllers/UserAdmin
/ViewModels
/Views
Business Logic
/Service/AccountService
/Service/ApplicationRoleManager
/Service/ApplicationUserManager
/Service/EmailService
/Service/SmsService
/Service/SignInHelper
Data
ApplicationDbContext
ApplicationUser
所以,我只是简单地将 Identity 插入到我认为合适的每一层中。我已将大部分日志放在业务逻辑层中,因为它不属于 Web,并且没有“真正的”数据库代码让它属于数据层。
附带问题:我有点不舒服,在 Web/App_Start/Startup.Auth 中,我必须实例化 Busness Logic 对象才能调用
app.CreatePerOwinContext(ApplicationDbContext.Create);
在数据层。我还没有考虑更多。这是另一个问题(但我发现它与我选择的架构有关)。
方法二
纯粹为不包含任何层的安全性创建一个程序集,即只需将 Identity 2.0.0 插入这个程序集。我的应用程序可以参考这个。但它违背了层次。但它封装了安全性。鉴于安全对象可以(或应该)在整个应用程序生命周期中驻留,这似乎不是一个坏主意。虽然没有考虑过可扩展性。