gpt4 book ai didi

c# - MVC 5 IoC 和身份验证

转载 作者:可可西里 更新时间:2023-11-01 03:10:02 25 4
gpt4 key购买 nike

我正要开始一个项目,我将在其中使用 MVC5。但是当我想使用 IoC 并稍后重用我的用户表,并向其中添加自定义内容时,我发现很难看到如何使用 MVC5 附带的新身份框架。

我越来越看重基本表单验证。您的解决方案是什么?

我的需求:

  • 必须注入(inject)用户存储库/服务
  • 用户存储库必须位于 DAL 中
  • 用户存储库必须能够支持 EF 以外的其他技术
  • 使用 OpenID 和 OAuth 进行身份验证必须在一定程度上易于实现
  • 必须安全
  • 应该可以在其他项目中重复使用,例如。 WPF

我一直在寻找答案,但我看到的一切都硬编码在 Controller 中。

你是如何解决这个问题的?您是从头开始编写大部分内容,还是可以绑定(bind)到可扩展到其他 .NET 平台(如 WCF 和 WPF)的内容?

以下代码直接取自默认 ASP.NET MVC 5 模板中的 AccountController。它做的第一件事是 Bastard Injection

[Authorize]
public class AccountController : Controller
{
public AccountController()
: this(
new UserManager<ApplicationUser>(
new UserStore<ApplicationUser>(
new ApplicationDbContext())))
{
}

public AccountController(UserManager<ApplicationUser> userManager)
{
UserManager = userManager;
}
}

接受的答案将交给那个人,向我展示他们所做的事情,其中​​包含上述要求

最佳答案

由于这是 .NET,标准的安全方法是在应用程序边界进行身份验证,并将身份验证信息转换为 IPrincipal . MVC 开箱即用地支持这一点。

如果您需要在身份验证过程中获得的其他信息,您可以在 Composition Root 中收集这些信息并使用它来组合您的服务。

例如,假设您需要较低层中经过身份验证的用户的电子邮件地址。任何需要用户电子邮件地址的类都可以简单地将其请求为 Concrete Dependency。 :

public class EmailThingy
{
private readonly string userEmail;

public EmailThingy(string userEmail)
{
if (userEmail == null)
throw new ArgumentNullException("userEmail");

this.userEmail = userEmail;
}

// other members go here...
}

在 ASP.NET MVC 中,复合根是 IControllerFactory。 IIRC,您可以从 CreateController 方法中提取身份验证数据,并使用它来组成您的对象图。

最近,我以相同的方式使用 IPrincipal:我将其作为依赖项注入(inject),而不是依赖 Thread.CurrentPrincipal 环境上下文,因为当所有内容都通过构造函数注入(inject)<进行一致注入(inject)时,单元测试会更容易/strong>.

关于c# - MVC 5 IoC 和身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20339810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com