Forms 身份验证凭据

更新:2007 年 11 月

用于在登录时验证用户的 Forms 身份验证凭据可以存储在外部数据源中,也可以存储在应用程序的配置文件中。

da0adyye.alert_note(zh-cn,VS.90).gif说明:

ASP.NET 成员资格是在 Forms 身份验证应用程序中存储和管理用户凭据的首选方法。有关更多信息,请参见 使用成员资格管理用户

将用户存储在应用程序配置文件中

使用 Forms 身份验证时,可以通过网站配置文件的 credentials 节中的用户/密码对来验证用户。可以使用 Authenticate 方法将从用户那里收集的凭据与 credentials 节中的用户/密码对列表进行比较,以确定是否应授予访问权限。在下面的示例中,如果用户 Kim 和 John 提供了正确的密码就可以登录。

<credentials passwordFormat="SHA1" >
    <user name="Kim"
          password="07B7F3EE06F278DB966BE960E7CBBD103DF30CA6"/>
    <user name="John" 
          password="BA56E5E0366D003E98EA1C7F04ABF8FCB3753889"/>
</credentials>

该示例中的凭据对是使用安全哈希算法 1 (SHA1) 密码哈希格式加密的。需要 PasswordFormat 属性。下表列出了该属性的值。

说明

Clear

密码以明文形式存储。用户密码可与此值直接比较,而不需要进行进一步的转换。

MD5

使用消息摘要 5 (MD5) 哈希摘要存储密码。为了验证凭据,将使用 MD5 算法对用户密码进行哈希运算并将计算出来的值与存储的值进行比较。使用此值时,从不存储或比较明文密码。此算法的性能比 SHA1 好。

SHA1

使用 SHA1 哈希摘要存储密码。为了验证凭据,将使用 SHA1 算法对用户密码进行哈希运算并将计算出来的值与存储的值进行比较。从不存储明文密码。使用该算法可以获得比 MD5 算法高的安全性。

.NET Framework 包括一些类和方法,这些类和方法便于您以编程方式创建哈希值进行永久存储。FormsAuthentication 类是对此任务的编程很有帮助的一个类。它的 HashPasswordForStoringInConfigFile 方法可以进行哈希运算。要进行更精确的控制,也可以使用 System.Security.Cryptography 类。

存储在文本文件中的哈希密码不能用于重新生成原始密码,但它们可能容易受到字典式攻击。在这种类型的攻击中,攻击者在获得对密码文件的访问权限之后,通过使用软件对一个大字典中的所有单词反复进行散列运算并将生成的哈希与存储的哈希进行比较,试图猜出密码。如果通过任何方式存储哈希密码,则您应该要求用户在选择密码时不使用常用的单词,并且密码应包含一些数字和非字母数字字符以防止字典攻击。此外,还可以使用 ASP.NET 成员资格来存储凭据,这样会使凭据的管理变得更容易。有关更多信息,请参见 使用成员资格管理用户

请参见

参考

FormsAuthenticationModule

其他资源

ASP.NET Web 应用程序安全性

Forms 身份验证提供程序