ASP.NET标识表在运行时更新/迁移

时间:2015-09-16 20:08:22

标签: c# sql asp.net asp.net-identity

我们正在创建一个新的Web应用程序,它将更新/迁移现有数据库,包括用户信息。由于密码是在用户表中进行SHA加密的,因此我需要在用户登录时进行迁移。

为了做到这一点,我想要挂钩用户验证代码 - 如果用户存在于新的Identity用户表中,那么好 - 我们已经完成 - 使用它。否则检查旧用户表(并使用旧密码验证机制验证密码),在新Identity表中创建用户,从旧表中删除旧用户(或标记为已迁移),然后返回该新Identity用户。

这是一种合理的方法吗?我有什么例子可以作为起点吗?

注意:我想使用标准的ASP.NET Identity 2.0表结构,但用户ID将为int - 因为现有模式依赖于int用户标识。

编辑:现有的网络应用程序将消失,我们将使用新的网络应用程序(使用ASP.NET标识)替换它,但我们仍将指向现有的数据库(包含旧用户)表和其他数据)。数据库的添加将是新的ASP.NET标识表以及要加入这些表而不是旧用户表的任何更新。

2 个答案:

答案 0 :(得分:1)

处理官方迁移指南中描述的旧密码哈希的好方法:http://www.asp.net/identity/overview/migrations/migrating-an-existing-website-from-sql-membership-to-aspnet-identity

在该页面上搜索SQLPasswordHasher并查看他们如何进行密码匹配。

基本上这个想法很简单 - 当您将系统更新为Identity时,您将所有旧用户及其哈希(和盐)复制到新的Identity表中。然后你告诉身份使用上面提到的SQLPasswordHasher来尝试匹配旧的SHA哈希或(对于已经更新的用户)新式哈希。并且(可选)您可以将新登录用户的哈希值更新为新样式。

我已经完成了一些项目并且没有一个问题。

答案 1 :(得分:0)

看起来好像是ApplicationOAuthProvider:GrantResourceOwnerCredentials,我们正在userManager.FindAsync()进行查找新用户表中的用户(带有pw)。如果失败(user == null check),我将添加代码以在旧用户表中查找用户,如果有(并且密码通过哈希测试),将在新用户表中创建具有旧用户表数据和新用户的用户密码哈希 - 然后将旧用户表记录标记为“已迁移”或“已升级”