集成ASP.NET标识的最佳实践 - 它们是否存在?

joe*_*dev 12 .net asp.net entity-framework entity-framework-6 asp.net-identity

我正在使用一个新网站的ASP.NET身份,似乎没有很多(任何?)示例如何以分离的方式执行此操作.我不希望我的域模型的DomainUser类必须继承Microsoft.AspNet.Identity.EntityFramework.User,所以我创建了一个如下所示的类:

public class IdentityUser : User
{
    public virtual DomainUser DomainUser { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经将DbSetASP.NET Identity所需的s 移动到与DbContext我的域模型相同的派生类中,如本答案所示.我将IdentityUser单向链接到DomainUservia Fluent API,如下所示:

modelBuilder.Entity<IdentityUser>().HasRequired(iu => iu.DomainUser).WithRequiredPrincipal();
Run Code Online (Sandbox Code Playgroud)

这使我可以将授权和身份验证的关注点与DomainUser类中定义的行为分开.这比将它们组合成一个类更好,但它仍然感觉很难看.我仍然在我的Domain项目中引用了所需的ASP.NET Identity程序集.我可以创建另一个项目,该项目仅包含我的IdentityUser类和对我的域程序集的引用以允许导航属性,但这开始让人感到困惑.

我觉得应该有更好,更清晰,更模块化的方式将身份链接到域,而不会导致紧密耦合.

有没有人想出更好的处理方法?我希望能引起参与ASP.NET身份项目(Hao Kung等人)的人们的注意,为此提供方向.

joe*_*dev 1

事实上,如果您要从 IdentityUser 继承,则 ASP.NET Identity 相关程序集也会随之而来。您无法将 Identity 与 ASP.NET 分开。IdentityUser问题中的原始示例不会给您带来太大帮助 - 在大多数情况下,如果您要IdentityUser在域项目中使用,您可能最好继承自。

如果您的域项目确实需要摆脱 ASP.NET 相关程序集,那么您可以将与 Identity 相关的类保留在您的 Web 项目中,并User在您的域项目中创建一个单独的模型,并以编程方式链接这两个模型,如此处建议的那样

  • 身份验证在某种程度上是一个跨领域的问题,因此您经常必须遵循不同的规则。虽然从技术上讲,身份验证部分是表示层问题,但您必须以某种方式将此身份验证与您的域授权连接起来,并且您的表示层需要一种存储身份验证数据的方法。因此,如果不实现新的 ASP.NET 身份提供程序来调用身份验证服务(而不是使用 EF 提供程序),就会出现泄漏。 (2认同)