使用asp.net会员资格有哪些优缺点?

And*_*rri 15 c# xml membership asp.net

我正在建立一个新的网站,朋友建议我使用asp.net会员资格进行身份验证过程(登录,注册,密码恢复等).

我看到一切都存储在XML文件中.

我想知道使用成员资格的优点和缺点是什么,而不是从头开始构建一些东西.

Gre*_*reg 29

MS登录解决方案由几个部分组成.

身份验证 - "谁可以访问您的网站"

表单身份验证 - 这基本上创建了一个安全的cookie,上面写着"我已经过身份验证!" 在每个请求.没有这个,用户就必须登录每一页.

  • 优点:这很好用
  • 缺点:无 - 使用它

成员资格 - 这是您存储用户及其密码以及验证用户凭据的方式.有几种方法可以解决这个问题:

  1. 使用SqlMembershipProvider - Microsoft为您提供了一个安全地存储用户/密码的数据库,并为您提供了一种验证凭据的方法.
    • 优点:
      • 更少/无需维护的自定义代码.作品"开箱即用"
      • 使用成员资格控制和API
    • 缺点:
      • 您必须使用Sql Server并使用其数据库架构.(不是问题IMO)
      • 无法控制最初生成密码的方式.他们长而丑陋
      • 熟悉该技术后,学习曲线更加陡峭
  2. 创建自定义MembershipProvider - 您可以从MembershipProvider继承以自定义数据的存储位置和方式.

    • 优点:
      • 您可以免费获得密码的加密/解密
      • 控制存储用户的位置以及数据的外观
      • 您仍然可以使用Membership控件和API
    • 缺点:
      • 必须实施自己的存储解决方案
      • 您必须编写,调试和维护大量自定义代码
      • 如果添加其他功能,则必须强制使用提供程序
  3. 创建自己的身份验证方案

    • 优点:完全控制
    • 缺点:
      • 你创造了一切,但必须调试/维护一切.
      • 您必须自己控制凭据的安全性.
      • 无法使用成员控制(这不是一个很大的损失,因为控件很容易复制)
      • 无法使用Membership API

授权 - "用户可以做什么?"

角色 - 角色通过web.config提供授权机制控制用户可以执行的操作,并且还可以在站点地图上进行安全修整.

  1. 使用SqlRoleProvider - Microsoft为您提供了一个存储角色的数据库

    • 优点:
      • 适用于web.config
      • 您可以为用户分配多个角色
    • 缺点:
      • 角色只是一个字符串,没有"权限层次结构"支持.这可能使创建用户可以编辑其他用户的规则变得困难.
  2. 创建自定义RoleProvider - 您可以从RoleProvider继承以自定义数据的存储位置和方式.

    • 优点:适用于web.config
    • 缺点:
      • 必须实施自己的存储解决方案
      • 仍然只是一个字符串,并且与之前的解决方案一样有限
      • 如果您没有正确实现它,它可以执行大量的数据库调用.
  3. 创建自己的身份验证方案

    • 优点:完全控制 - 只需对您的页面进行自定义检查,并根据需要进行错误/重定向
    • 缺点:
      • 不适用于web.config/sitemap提供的授权机制.实际上,这意味着将页面添加到文件夹(例如/ Admin)不再保证该页面的安全性.

值得注意的是,可以相互独立地选择或定制成员资格和角色提供者.我个人建议使用SqlMembershipProvider,如果可以,并评估您的角色提供程序的选项.