我有一个全新的MVC5项目,我需要用户管理。当我创建一个新项目时,Visual Studio 会为我完成并添加大量代码,以便我可以利用身份验证和授权的概念。
问:ASP.NET Identity 是否是 Web 应用程序之外的用户管理的"好"解决方案?我想有一天将移动应用程序添加到组合中,我希望将相同的 BLL 代码库用于 Web 应用程序和移动应用程序。
此外,我对 ASP.NET 身份的理解非常有限,因为它在幕后使用HttpContext
来"连接"身份验证和授权。因此,我可以在控制器操作(如 [Authorize]
)上使用属性来继承授权行为。我真的很喜欢这个功能,但我担心这种方法不一定适用于移动应用程序,因为没有使用HttpContext
。
这里要注意的一件事是,我也不喜欢在我的 MVC 项目中直接使用 DBContext
的 IdentityConfig.cs
类。我一直在摆弄使用 n 层方法,但我似乎无法成功地将身份验证/身份验证部分分解为适当的 BLL/DAL 架构模型。
所以,我想我总共有两个问题:
-
ASP.NET Identity 是 Web 和移动应用程序的"好"身份验证/身份验证选择吗
-
如果"是",如何将
RoleManager
/UserManager
类撕成 BLL 并让它们拉取利用数据访问层?
1)是的,如果您打算稍后构建移动应用程序,请务必进行 ASP.Net 身份2身份验证。查看这篇文章以了解有关 ASP.Net 身份2的更多信息。
我最终为我的 webapi 项目使用了 ASP.Net 身份 2 OAuth 身份验证,该项目也旨在迎合移动应用程序。没有必要担心Httpcontext。您需要在客户端(无论是 Web 应用程序还是移动应用程序)中跟踪的只是 OAuth 发布的access_token。
2)是的。ASP.Net Identity 2非常灵活,因为它甚至允许您使用另一个数据库引擎(如MySQL)来存储用户/角色信息。看看这个。我将所有自定义的 OWIN 特定表放在不同的 BLL 中,并将其插入到 WebAPI 项目中。两者都通过接口链接,因为 DAL 驻留在不同的项目中。将它与出色的DI框架(如StructureMap/Ninject/SimpleInjector)结合使用,您不必担心DbContext会弄乱您的架构模型。