C# 从UI层抽象asp.net mvc标识
我正在构建一个新的MVC应用程序。通常,我的项目结构如下所示:C# 从UI层抽象asp.net mvc标识,c#,asp.net-mvc,asp.net-identity,C#,Asp.net Mvc,Asp.net Identity,我正在构建一个新的MVC应用程序。通常,我的项目结构如下所示: public interface IAuthenticationService { bool VerifyPassword(User user, string password); bool SignIn(User user); void SignOut(); } DAL层(实体和存储库) 服务层(在api/前端和DAL之间协调的面向业务的服务调用) 前端,可以是web API或MVC应用程序 我的
public interface IAuthenticationService
{
bool VerifyPassword(User user, string password);
bool SignIn(User user);
void SignOut();
}
- DAL层(实体和存储库)
- 服务层(在api/前端和DAL之间协调的面向业务的服务调用)
- 前端,可以是web API或MVC应用程序
我希望有人能为我提供一些提示或技术文档,说明如何将所有登录和身份验证抽象到后端层。您可以在业务层中创建一个非常基本的界面。它看起来像这样:
public interface IAuthenticationService
{
bool VerifyPassword(User user, string password);
bool SignIn(User user);
void SignOut();
}
您可以在业务层、UI层或单独的基础结构层中使用ASP.NET标识实现此接口
此接口可以通过不同的技术实现,这些技术可以在运行时由IoC容器注册,例如,您可以在
AccountController
中使用该接口。因为身份验证框架往往会经常更改(每年左右),这使您可以更轻松地进行切换。从技术上讲,它已经被抽象了。UserManager
类是ASP.NET标识的核心,是围绕数据库上下文的包装器。现在,如果您要进一步抽象它,那么在代码中根本没有对ASP.NET标识的引用,我认为这是不必要的,但仍然是可能。您只需将所有代码移动到您的服务层,然后调用您的服务以点击UserManager
上的相应方法。不过,您仍然需要传递上下文,这样您就不会创建多个实例,这肯定会咬到您。但是,我该如何使用该属性呢在我的控制器中有什么以及如何实现oauth?@Patrick如果你指的是属性,你可以直接使用它,ASP.NET Identity将考虑它。它位于System.Web.Mvc
命名空间中,因此它与身份验证实现没有直接的依赖关系。关于oauth,我没有使用它的经验,因此我不确定你是否使用它ould把它抽象出来。只是好奇有人真的做到了吗?听起来很简单,但由于EF标识实现在Account controller中包含的扩展方法,我所走的路线可能会造成如此混乱。我正试图达到一个点,我可以拉EF、标识和EF标识依赖关系完全来自我的MVC项目。我只是想看看是否有人有关于此/最佳实践的任何示例,因为我的示例很混乱,我可能必须重新启动。我不想在代码中删除asp.net标识。只想在MVC项目中删除它,并将其放在服务层项目中。也许我确实应该从移动所有代码开始从Controller到服务,然后看我接下来应该做什么。@Patrick如果将UserManager放在服务层,则必须从数据层传递dbContext(或IdbContext),这是错误的。您有解决方案吗?