2009-02-24 53 views
5

我正在开发的网站将允许用户在3个级别登录。在ASP.NET中开发自定义登录/身份验证系统的最佳方式是什么

等级1 - 未登录

等级2 - 他们登记他们的电子邮件地址,并收到确认电子邮件和登录的方式。

2级 - 他们使用用户名/密码登录,然后发送到Web服务。如果Web服务返回“成功登录”结果,则它们将登录到网站。

根据登录级别,有些网页将可用,而其他网页将受到限制。

我的问题是,我该如何开发这个?

我在做ASP.NET MVC项目。

我应该只编写我自己的AccountController吗?我应该使用.NET Forms身份验证吗?使用.NET代码手动执行表单身份验证的好处是什么?

如果我自己做了这个,在成功登录时,我只是将登录用户存储在会话变量中。这样做有没有什么坏处,或者我正在做什么,是否可以?

+0

您正在查看的身份验证方法是什么? – Suroot 2009-02-24 04:10:19

+0

那么现在我正在考虑使用“LogIn”方法从头开始创建自己的AccountController,该方法接受“emailaddress”作为参数。如果电子邮件地址在数据库中,则会将会话变量“CurrentUser”设置为该数据库记录。 有没有什么理由不这样做? – Jonathan 2009-02-24 04:13:11

回答

1

我会强烈建议您打滚自己的身份验证系统。 .net表单验证非常容易使用;为什么你会浪费时间自己建造呢?认证系统有许多缺陷,除非你是MS,你真的没有资源来构建和测试它们。

确定用户可以看到的页面是授权,您肯定可以自己编写代码。我建议您查看.net中的Identity/Principal接口并重写“IsInRole”方法以满足您的需求。

会话对安全性不是很好。它们在网络服务器场景中效果不佳,并且应用程序池决定回收时...所有用户都注销。 .net表单验证默认使用cookie。

0

在你的情况,我会建议使用简单的表单身份验证。 (见How to: Implement Simple Forms Authentication)。一个简单的LoginController可以处理这个问题。

在会话中存储用户配置文件数据没有任何“错误”,但如果您需要负载平衡您的网站,这可能会导致可伸缩性问题。推荐的方法是实现一个自定义RoleProvider。 (请参阅Implementing a Role Provider。)

至于访问控制,也许您可​​以拥有一个BaseController类,用于检查用户的当前角色,以了解他们具有哪种访问权限。

1

我建议编写自己的定制会员/认证系统的最好方法是实际使用内置在.NET的MembershipProvider类,并从派生自己的自定义类。您可以始终通过继承.NET框架中的System.Web.Security.MembershipProvider(和RoleProfile类)类来创建自己的成员资格提供程序,并提供您自己的特定实现。通过这种方式,您可以获得使用坚实可靠的“基础框架”构建认证和授权系统的好处。

通过由框架自己的基类派生您的自定义成员资格提供程序,您可以充分利用ASP.NET成员系统内置的许多优秀功能,例如web.config文件中的声明授权和内置ASP.NET身份验证票据。我回答了一个非常类似的问题here,详细介绍了其中的一些优点。

我必须承认,有一点我在ASP.NET的“标准”内置会员供应商中忽略了一点,那就是缺少一种允许用户在网站上注册的简单方法,而不是“立即验证“他们的帐户,而是向用户发送包含”验证链接“的电子邮件,他们必须点击才能访问该网站。虽然这不是ASP.NET MembershipProvider类中的标准功能,但实现相对容易。

有关于ASP.NET的成员资格,角色和个人资料提供者(包括一个在允许登录前验证通过电子邮件帐户),它可以在这里找到一个伟大的系列赛的斯科特·米切尔文章:

Examining ASP.NET 2.0's Membership, Roles, and Profile

如果您从ASP.NET提供程序派生自己的自定义提供程序,它应该会有所帮助。

相关问题