从自定义表迁移用户到ASP.NET Membership表

3
我正在创建一个新的中间层,所有客户端调用都将通过WCF服务进行。 我们使用带有服务的ASP.NET成员身份验证来验证用户。 中间层将访问现有数据库,在其中我们已经有一个包含用户名和密码的InetUsers表。
这就是开始变得混乱的地方。 这个新的中间层将被我们的Web应用程序使用,但不会被我们现有的桌面应用程序使用,后者在未来某个时候重写之前将使用旧的COM +中间层。 Web应用程序的用户管理在桌面应用程序中进行。 换句话说,用户将从桌面应用程序中创建并设置密码,并在其中访问已经存在的InetUsers表。
理想情况下,当我们部署新的中间层时,我们将从InetUsers表中获取所有用户,并为它们在aspnet_Users和aspnet_Membership中创建记录。 然后,我们将在InetUsers表上设置触发器,以使aspnet_Users和aspnet_Membership保持最新状态。
这里有一堆问题需要解决,所以我会尝试在这里列出它们:
- 这是正确的方法吗? 显然,在两个地方拥有这些数据并不理想,但请记住,我不是最终的决策者,我们在这里有点陷入了一些遗留问题,至少现在是这样。 仍然 - 也许有更好的方法。 - 在同样的思路下 - 我们是否最好编写自己的成员身份验证提供程序而不是使用SqlMembershipProvider? 这么做有多难/容易? - 如果我们采用这种方法,我计划在存储过程和触发器中使用aspnet_Membership_XXXX。 经过一些研究,我发现如果我想直接从SQL调用aspnet_Membership_CreateUser(即在触发器中...)而不是使用API,则必须存储明文密码,因为否则我无法获取盐和哈希值。 这是真的吗? - 所有这些都有意义吗,还是我开始走错了?
非常感谢您提供的任何帮助。
2个回答

5
如果您已经有一个数据库结构,我会编写一个自定义的成员资格提供程序,并跳过现有的成员资格结构。这样,您就可以使用开发人员已经习惯于使用的一个数据库结构,无论是用于数据访问、报告还是其他目的。创建一个从MembershipProvider继承的类。参考:http://msdn.microsoft.com/en-us/library/f1kyba5e.aspxhttp://www.devx.com/asp/Article/29256/0/page/3
您只需要实现您实际需要的功能即可。

谢谢,看起来那会是最适合我们的,所以我会考虑去实现它。 - Zann Anderson
再次感谢,对我们来说使用我编写的自定义提供程序是一个更好的解决方案。 - Zann Anderson

1

编写自己的会员提供程序并不是“困难的”。如果您计划在一段时间内使用混合解决方案,那么编写自己的提供程序可能比在两个地方维护数据更加清晰。

然后,当您准备好转移到新的标准会员提供程序时,只需要将用户转移一次并重新指向新的提供程序即可同时为桌面和Web界面进行操作。


感谢@Kendrick的好建议。我选择了@Brian的答案,因为他链接了一些关于如何创建自己的成员提供程序的文章,但是在将来迁移到SqlMembershipProvider的想法也很好,我会记在心里的。 - Zann Anderson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接