ASP.NET 标识 2 到 3

Posted

技术标签:

【中文标题】ASP.NET 标识 2 到 3【英文标题】:ASP.NET Identity 2 to 3 【发布时间】:2016-08-14 08:23:41 【问题描述】:

是的,所以..我想我很困惑!

我有几个使用 ASP.NET Identity 2.1 运行的 ASP.NET MVC 5 站点,一切都很好。我正在创建一个新的 MVC 6 站点,我希望用户在那里使用他们用于其他系统的现有凭据。我已经尝试过以下方法:

    将 ASP.NET 身份 2 数据库迁移到 3(说它不能,因为表已经存在,我认为它会完全迁移用户) 尝试让 MVC 6 与 ASP.NET Identity 2.1 一起使用,但失败了

我只是想知道我的选择是什么,因为新版本的文档不是很好,我知道数据库中有 DDL 更改,但我有点希望我的 MVC 5 网站有一种方法可以携带.NET Identity 3 数据库与 2.1 向后兼容。

我的另一个选择是升级 MVC 5 应用程序以使用 Identity 3,这反过来又意味着将它们更新到 MVC 6,这是我真正没有资源的东西,或者拥有一个全新的 Identity 数据库(这似乎是最简单的选择)。

任何意见都会有所帮助,毫无疑问,我错过了一些细节,如果有人对设置有任何进一步的问题,我很乐意填补空白。

【问题讨论】:

【参考方案1】:

我也在做同样的事情,这是一个很大的努力 - 你将不得不运行数据库迁移,但首先

ASP Identity V3 表和迁移

ASP Identity V3 字段

配置表格 在 Startup.cs 并更改 services.AddIdentity

   services.AddIdentity<ApplicationUser, IdentityRole<int>>()
    .AddEntityFrameworkStores<ApplicationDbContext, int>()
    .AddDefaultTokenProviders();

在 ApplicationContext.cs 中,将类更改为以下签名。

 public class ApplicationDbContext : IdentityDbContext<ApplicationUser, IdentityRole<int>, int>

在 ApplicationUser.cs 中,将类更改为以下签名。

`public class ApplicationUser : IdentityUser<int> ...`
鉴于所有更改,我发现删除 迁移文件夹(迁移除外)。转到命令提示符 项目目录并键入/添加迁移,如dotnet ef migrations add MyDatabaseHere -o Data\Migrations。 (-o 选项是指定目标文件夹而不是根文件夹) 对于任何迁移问题,我只需删除数据库并重新部署即可。 或者你可以用this自动化我没试过这个

我从 EF 获得了两个迁移脚本,我不知道为什么...但是从 github 链接 1 和 2 获得更多参考

【讨论】:

【参考方案2】:

实现 IdentityServer3,它可以直接连接到您现有的 ASP.Net Identity EF DB。然后将其他站点用作 oAuth 客户端,作为 MVC 5 和/或 MVC 6 并不重要,因为它们所做的只是在您的 IdentityServer3 站点之间来回传递安全令牌。

【讨论】:

【参考方案3】:

您可以在 Asp.Net Core 中使用身份 2,并将密码哈希保存在数据库中。只需在 startup.cs 中添加此代码

 services.Configure<PasswordHasherOptions>(options => 
          options.CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV2;
      );

【讨论】:

以上是关于ASP.NET 标识 2 到 3的主要内容,如果未能解决你的问题,请参考以下文章

MVC-3 ASP.NET 共享视图-重定向-Razor

从 Razor View-MVC3 ASP.NET 中的 Web.config 访问键值

如何使用 MVC3 ASP.NET 4.5 和 EF6 基于实体属性注释对 TextBoxFor 进行舍入

ASP.NET MVC Model 验证总结

ASP.NET 标识 2 到 3

将 ASP.NET 标识集成到现有 DbContext 中