ASP.NET成员资格

ASP.NET成员资格,asp.net,asp.net-membership,Asp.net,Asp.net Membership,我想在以下(低安全性)场景中使用ASP.NET成员资格提供程序 我的公司将代表我们的客户创建和管理用户帐户。这些账户可能由客户公司的几个人共享(这是个问题吗?) 将有2种类型的用户(2个角色):客户端和管理员。管理员是指我公司内拥有创建客户机用户帐户等特权的人员 客户端将无法自行注册。他们也不能选择自己的密码,他们也不能更改自己的密码,因为这只会在几个人共享同一个帐户时造成混乱 我的内部用户(管理员)将为每个客户端设置密码。下面是我正在努力解决的问题:如果客户打电话要求提醒他们的密码,我的管理员

我想在以下(低安全性)场景中使用ASP.NET成员资格提供程序

我的公司将代表我们的客户创建和管理用户帐户。这些账户可能由客户公司的几个人共享(这是个问题吗?

将有2种类型的用户(2个角色):客户端和管理员。管理员是指我公司内拥有创建客户机用户帐户等特权的人员

客户端将无法自行注册。他们也不能选择自己的密码,他们也不能更改自己的密码,因为这只会在几个人共享同一个帐户时造成混乱

我的内部用户(管理员)将为每个客户端设置密码。下面是我正在努力解决的问题:如果客户打电话要求提醒他们的密码,我的管理员用户如何才能知道密码是什么我可以将提供程序配置为以明文(或其他可恢复的形式)存储密码吗?如果可以,我可以通过.NET API获取密码吗?


正如我在一开始所说的,这是一个低安全性的应用程序,因此我只打算在(内部)网页中显示密码,在那里我有一个所有用户的列表。

即使它的安全性很低,最好不要将密码存储在纯文本中。因为您希望它是可恢复的,所以应该考虑对密码进行加密。通过加密,可以使用正确的密钥将其还原为原始形式。查看“成员资格”部分

即使它的安全性很低,但最好不要以纯文本形式存储密码。因为您希望它是可恢复的,所以应该考虑对密码进行加密。通过加密,可以使用正确的密钥将其还原为原始形式。请查看“成员资格”部分,下面是一个如何执行此操作的示例:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
    <providers>
      <clear />
      <add 
        name="SqlProvider" 
        type="System.Web.Security.SqlMembershipProvider" 
        connectionStringName="MySqlConnection"
        applicationName="MyApplication"
        enablePasswordRetrieval="false"
        enablePasswordReset="true"
        requiresQuestionAndAnswer="true"
        requiresUniqueEmail="true"
        passwordFormat="Clear" />
    </providers>
  </membership>

密码格式


指定密码格式。SQL Server成员资格提供程序支持清晰、加密和哈希密码格式。明文密码存储在纯文本中,这提高了密码存储和检索的性能,但安全性较低,因为如果SQL Server数据库受损,密码很容易读取。加密密码在存储时会被加密,并且可以解密以进行密码比较或密码检索。这需要对密码存储和检索进行额外的处理,但更安全,因为如果SQL Server数据库受损,密码不容易破译。散列密码使用单向散列算法和存储在数据库中时随机生成的salt值进行散列。验证密码时,将使用数据库中的salt值对其进行散列以进行验证。无法检索哈希密码。

下面是一个如何执行此操作的示例:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
    <providers>
      <clear />
      <add 
        name="SqlProvider" 
        type="System.Web.Security.SqlMembershipProvider" 
        connectionStringName="MySqlConnection"
        applicationName="MyApplication"
        enablePasswordRetrieval="false"
        enablePasswordReset="true"
        requiresQuestionAndAnswer="true"
        requiresUniqueEmail="true"
        passwordFormat="Clear" />
    </providers>
  </membership>

密码格式


指定密码格式。SQL Server成员资格提供程序支持清晰、加密和哈希密码格式。明文密码存储在纯文本中,这提高了密码存储和检索的性能,但安全性较低,因为如果SQL Server数据库受损,密码很容易读取。加密密码在存储时会被加密,并且可以解密以进行密码比较或密码检索。这需要对密码存储和检索进行额外的处理,但更安全,因为如果SQL Server数据库受损,密码不容易破译。散列密码使用单向散列算法和存储在数据库中时随机生成的salt值进行散列。验证密码时,将使用数据库中的salt值对其进行散列以进行验证。无法检索哈希密码。

为什么连密码都有?为什么不只需要用户名而不完全存储密码呢?@Thomas:我希望用户名是合乎逻辑的,这会使它们非常容易猜测,否则我可以通过用户名的模糊性来依赖安全性。拥有密码会让你很难虚张声势地进入。正如我所说,这些密码可能会在一个客户组织内的几个人之间共享,因此密码泄漏的可能性很高(更糟糕的是,密码将长期保持不变)。然而,密码仍然为99.99%不知道密码的人提供了障碍。这正是我的观点。如果密码要像在兄弟会的房子里一样被传递,那么你最好完全跳过密码要求,或者使用windows身份验证。在我看来,使用明文密码是最糟糕的解决方案。@Thomas:密码将在客户公司之间传递,但在客户之间传递要少得多,这正是我们想要的屏障(与其说是墙,不如说是栅栏)。Windows身份验证不好-我不想管理Windows帐户或购买CAL等。为什么还要有密码?为什么不只需要用户名而不完全存储密码呢?@Thomas:我希望用户名是合乎逻辑的,这会使它们非常容易猜测,否则我可以通过用户名的模糊性来依赖安全性。拥有密码会让你很难虚张声势地进入。正如我所说,这些密码可能会在一个客户组织内的几个人之间共享,因此密码泄漏的可能性很高(更糟糕的是,密码将长期保持不变)。然而,密码仍然为99.99%不知道密码的人提供了障碍。这正是我的观点。如果密码要像在兄弟会的房子里一样被传递,那么你最好完全跳过密码要求,或者使用windows身份验证。在我看来,使用明文密码是最糟糕的选择