ASP.NET中自定义MembershipProvider的优点是什么?

7
如果我需要实现自己的MembershipProvider类,我必须自己实现所有所需的服务,那么通过实现MembershipProvider派生类与编写自己的MySecurity类相比,我能获得什么优势?
5个回答

6
获得一个正确的身份验证系统很困难,因为很容易构建出仅看上去有效的系统。你不想发现在部署一年后,你的系统在六个月前就已经被攻破了。
使用MembershipProvider模型构建您的系统可以帮助您正确实现它,因为这提供了一个适合正确实现的框架。您只需要准确填写一组方法,并依靠提供的高级架构来确保您在正确的位置使用正确的方法。
相对而言,单独完成方法实现要容易得多。您可以将其放入单元测试中并确信它们按预期工作。
换句话说,您不必担心在正确的位置检查身份验证令牌。调用成员资格提供程序的ASP.Net部分知道何时执行该操作。您所要做的就是正确实现检查,通常只涉及简单的比较。
此外,您可能无需从头开始。您可以选择继承现有提供程序并仅添加它尚未提供的功能。

是的,但是在我必须为这些方法提供的代码中正确实现身份验证系统的细节不是非常重要吗?我完全理解使用现有的SqlMembershipProvider的优点,但如果我需要例如一个Access的提供者,我仍然需要自己编写它。 - ProfK
你不需要全部自己编写代码:在ASP.Net中有调用提供程序的代码,你可以信任它是正确的,并且你可以继承/扩展现有的提供程序。我更新了我的答案来解释这一点。 - Joel Coehoorn
@Joel,谢谢。我可能需要更全面地考虑大局,并查看我的提供者将在哪里以及如何使用,因为如果只是我的表单显式调用它,我基本上必须从头开始,因为几乎所有的基类方法都是抽象和空的。 - ProfK

2

如果您只需要与默认成员资格提供程序之一“稍有不同”的东西,那么您可能应该考虑继承内置提供程序或更好的第三方提供程序之一,并通过所需的附加功能进行扩展或覆盖您想要更改的功能。


1
编写自己的MembershipProvider类的主要优点是,它被ASP.NET视为一流组件,您可以使用标准接口进行身份验证和授权,如果您想使用不同的提供程序,只需稍后更改配置文件即可。

1

从技术上讲,通过使用现有的模型,您应该能够将提供程序轻松地放入其他Web应用程序中,以用很少的努力替换其成员资格系统,从而获得某种程度的可移植性。

不幸的是,似乎有很多第三方在成员资格/个人资料方面走了自己的路线,这令人印象深刻,也令人沮丧,特别是当您已经花费了所有精力编写基于它的内容时。

话虽如此,通过使用成员资格提供程序模型,所有使用成员资格的其他控件都可以“正常工作”(即Login、LoginStatus、LoginName等),而无需编写这些控件的自定义版本。


0

这要看情况... 我发现它非常有用,因为我必须添加函数的概念,以便每个角色都有与之相关联的函数等等。

在那种情况下,我实现了自己的Membership和RoleProvider类,其中包含AddFunctionToRole方法... IsFunctionAssignedToUser方法... 等等

更多信息在这里


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