将用户从自定义表迁移到ASP.NET成员资格表

时间:2011-03-09 16:23:29

标签: c# asp.net wcf asp.net-membership

我正在创建一个新的中间层,我们所有的客户端调用都将通过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 个答案:

答案 0 :(得分:5)

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

您只需要实现您实际需要的功能。

答案 1 :(得分:1)

对您自己的会员提供商进行编码并非“困难”。如果您计划使用混合解决方案一段时间,那么推出自己的提供商可能比在两个地方维护数据更清晰。

然后,当您准备转移到新的标准成员资格提供程序时,只需将用户转移一次并重新指向桌面和Web界面的新提供程序即可。< / p>

相关问题