微软成员提供程序 vs 自定义提供程序 vs 完全自定义登录系统

28

我目前正在将一个非常老但有效的经典ASP网站转换为ASP.Net。

该网站有一个完全定制的用户管理系统。虽然它运行良好,但我真的需要更新它,使其更加灵活以适应一些即将进行的未来项目。

当我询问某个人时,他们说“你需要使用Microsoft提供者”并对Microsoft发布所有这些免费东西以及它们是多么出色且应尽可能重用的内容进行了演讲。

我已经做了很多研究(主要是查看http://asp.net/learn上的视频),并对其中一些功能印象深刻,因为似乎有针对需要花费大量时间编写的项的拖放组件。

然而,当前的成员资料数据库解释起来很复杂,它是一个完全定制的数据库,具有许多内部关系... 它实际上与默认的Microsoft提供程序不“兼容”。

我看了看How Do I:创建自定义成员身份提供程序?,但我感到有点不在我的舒适区,并担心它会影响速度、引入安全漏洞或根本不起作用。

归根结底,Microsoft成员身份提供程序应该适合我——我真正需要的自定义只是登录使用我的数据库中的用户名/密码字段以及创建用户脚本,其中包含许多定制代码以及三方系统(需要提供服务等)。

我只是想知道,如果面临类似情况,您会怎么做?

  1. 使用Microsoft成员资格提供程序,并以某种方式使其为您工作(虽然我希望得到建议)

  2. 使用Microsoft成员资格提供程序,但使用围绕您的代码进行定制的自定义提供程序。

  3. 使用您自己完全定制的解决方案?


如果所有用户都在同一公司,那么您是否可以依托其他身份验证工具呢?这样可以避免用户再记住另一个密码,也可以避免编写密码更改逻辑。 - DOK
并非所有用户都在同一家公司中... 第一个用户注册一个公司,从他们的控制面板中,他们可以设置其他用户。 - Wil
4个回答

8

我曾经在类似的情况下。在两种情况下,我们都创建了提供程序(MembershipProvider、RoleProvider、ProfileProvider)的定制实现,以围绕现有机制进行操作。

在这两种情况下,我们仅使用提供程序实现来进行只读访问,例如为我们提供web.config中的简单验证等内容。用户管理代码保持不变,因为它已经可以正常工作。


保持提供程序实现只读,这是一个好习惯。我在项目中也这样做,以便利用内置的表单身份验证功能,同时将其余的管理代码放在一个单独的类库中。 - Element

8

那个视频确实让事情变得复杂了 :) 如果您要实现自定义提供程序,那么反射现有提供程序是一个很好的起点 :)

当然,作为一种快速而粗糙的选择,您可以篡改SQL Membership提供程序使用的存储过程,但用于提供服务的自定义代码可能会超出这一范畴。

如果您仔细考虑一下,远程提供服务并不真正属于成员资格提供程序,它并不是真正的成员资格功能 - 所有成员资格只是提供用户名和密码以及围绕它们进行身份验证。我个人认为,您应该将服务的提供移出成员资格提供程序,并在创建用户后在ASP.NET站点上执行它 - 即使只是在成员资格提供程序完成其工作后调用存储过程。如果您这样做,您可能会发现SQL成员资格提供程序将为您完成所需的所有操作(可能还包括角色和配置文件提供程序),因此您需要编写的代码要少得多!


我同意将它们分开...在编写时,它只是一个单一的应用程序,并没有构建模块化,甚至没有考虑到它会被用于其他系统。这是我在刷新中想要做的事情之一。我担心编辑 MS 的存储过程,以防后来的更新会让我陷入困境。此时,我认为我可能会自定义所有内容(毕竟,该系统在过去的 ~7 年中一直运行良好),并考虑稍后实现 MS 的东西... - Wil
但是,是啊,我惊叹于角色和个人资料,花了我几周时间才写好了一些东西,而他们有可以直接使用的拖放组件! - Wil
2
我没有看过这个视频,但是MSDN上的"How to: Implement a custom membership provider"(http://msdn.microsoft.com/en-us/library/ms366730.aspx)提供了一个非常好的简单成员资格提供程序的介绍,包括对数据库实现的建议,这些建议可以很容易地进行调整。 - Zhaph - Ben Duguid
+1@ Zhaph - Ben Duguid,喜欢那个网站,也非常感谢Blowdart给予的额外帮助(+1和答案!)。 - Wil
我有一个类似的问题,所以我没有开启一个新的线程。我正在开发一个自定义的会员提供程序,但是我有点困惑该怎么做。会员提供程序使用像用户名这样的东西作为插入点的搜索,但是我的网站使用电子邮件地址作为登录的用户名,并且在创建用户时还必须存储与Facebook相关的用户信息。我该怎么办? - Shekhar_Pro
我已经开了一个新的线程来回答上面的问题 https://dev59.com/aVPTa4cB1Zd3GeqPfw1K - Shekhar_Pro

3

如果现有的提供程序可以正常工作(具有您数据所需的正确字段),请使用它来开始。稍后您可以非常容易地用客户提供程序替换它(只需更改一个配置值即可)。

请注意,ASP.NET没有“开箱即用”的管理界面,您需要自己设计或使用第三方界面。


3
使用我的专用 MembershipProvider 来操作自己的数据库表。

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