我正在构建一个新的MVC应用程序。通常我总是有一个如下所示的项目结构:
我的问题是我总是在用户管理方面遇到混乱的实现。我使用了会员提供者,因此使这部分不那么好。现在我看到了新的Identity实现,我真的很喜欢它。我做了一些热点搜索,将它抽象到后端,但没有结果。
我发现这篇关于构建项目的帖子,但没有给出真正的答案:Decoupling ASP.NET MVC 5 Identity to allow implementing a layered application
我希望有人可以向我提供一些提示或技术文档,如何将所有登录和身份验证抽象到后端层。
答案 0 :(得分:4)
您可以在业务层中创建一个非常基本的界面。它看起来像这样:
public interface IAuthenticationService
{
bool VerifyPassword(User user, string password);
bool SignIn(User user);
void SignOut();
}
您可以在业务层,UI层或单独的基础架构层中使用ASP.NET Identity实现此接口。
此接口可以通过不同的技术实现,这些技术可以在运行时由IoC容器注册,您可以使用AccountController
中的接口。由于身份验证框架往往会经常更改(每年左右),因此您可以更轻松地进行切换。
答案 1 :(得分:4)
从技术上讲,它已经被抽象化了。作为ASP.NET标识核心的UserManager
类是数据库上下文的包装器。现在,如果你正在谈论进一步抽象它,那么在代码中根本没有对ASP.NET Identity的引用,我会说这是不必要的,但仍然可能。您只需将所有代码移至服务层,然后调用您的服务即可点击UserManager
上的相应方法。但是,你仍然需要传递你的上下文,这样你就不会最终创建它的多个实例,将咬你,肯定。