ASP .NET 中的身份验证:.NET 安全性指导[4]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

地址(或类似的唯一字段)。从客户端的观点来看,安全性是无缝
的,因为客户端不需要使用登录页来登录。这就使得证书在自动化业务流程方面成为一
个有吸引力的选择。
典型应用方案
以下情况下,您应考虑使用证书身份验证:
您所保护的数据非常敏感,您需要非常安全的解决方案。
您需要互相身份验证。
您希望第三方能够管理服务器和证书拥有者之间的关系。
您希望实现无缝的客户端交互,例如自动 B2B 交易。
以下情况下,您不应考虑使用证书身份验证:
发布和管理客户端证书的成本超过了增加安全性所获得的价值。
其他考虑
选择证书身份验证时,您还应考虑以下问题。
部署
您需要将客户端证书物理部署在客户端工作站中。有多种方法可以进行此部署,从
Web 部署到从 CD-ROM 安装证书。通常是部署的问题导致了证书模式的使用不如其他与
SSL 相结合的身份验证模式广泛。
映射到 Windows 帐户
可以将证书映射到域或 Active Directory 帐户。如果需要对个别用户进行身份验证,
可以使用一种称为“一对一映射”的技术,将证书映射到单独帐户。如果使用 Active
Directory 映射,则对一对一映射没有限制。
如果需要验证来自特定组或组织的所有用户,则可以使用多对一映射,例如,将所有包
含同一公司名称的用户映射到一个帐户。
例如,考虑以下 B2B 方案:
公司 A 允许其合作公司 B 查看其部分内部网站。
公司 B 的计算机安装有证书。
多对一映射的结果是,ASP .NET 应用程序将作为通用的“CompanyB” Windows 帐户运
行。
有关证书的深入信息,请参阅由 Michael Howard 所著的《设计 Microsoft Windows
2000 基于 Web 的安全应用程序》。
实现
您必须配置 IIS 以进行证书身份验证。有关将公共密钥证书映射到 Windows 2000 用户
帐户的详细信息,请参阅将证书映射到用户帐户的循序渐进指南(英文)。
Passport 身份验证
Passport 身份验证是由 Microsoft 提供的集中身份验证服务。使用 Passport 时,在
某些情况下您不必实现自己的身份验证代码、登录页和用户表。Passport 使用
Cookie 机制工作。如果客户端以前已经通过了 Passport 验证,则允许它们访问您的站
点。否则,它们将被自动重定向到 Passport 站点以进行身份验证。
如果您需要在多个域之间进行单一登录(这些域也支持 Passport),那么 Passport 是
一个好选择。Passport 不仅提供身份验证服务,还提供包括配置文件管理和采购服务在
内的其他服务。
在 Windows 2000 平台上,Passport 没有直接集成到操作系统内部的任何身份验证和授
权机制。.NET 框架确实会检查 Passport Cookie,但如果您维护自己的数据库,您必须
实现自己的代码,以将 Passport 用户映射为自己的用户,同时还要实现自己的授权机
制。
典型应用方案
以下情况下,您应考虑使用 Passport 身份验证:


您的站点要与其他启用 Passport 的站点结合使用,同时您希望访问这些站点的用户能
够进行单一登录。
您不想维护用户名和密码数据库。
以下情况下,您不应考虑使用 Passport 身份验证:
您希望使用已经存储在自己的数据库或 Active Directory 中的用户名和密码。(尽管
有可能使用额外的代码将 Passport ID 映射为用户帐户。)
您的客户端是通过编程来访问站点的其他计算机。
其他考虑
选择 Passport 身份验证时,您还应考虑以下问题。
启用 Passport
使用 Passport 身份验证要求站点注册 Passport 服务并在服务器中安装 Passport
SDK。
代理
在 Windows 2000 中,不可能从一个服务器将用户的 Passport 安全凭据代理到另一个

映射到用户帐户
Passport 用户 ID (PUID) 仅仅是一个标识。如果您的用户帐户是在 Active
Directory 或任何自定义数据库中定义的,并且您需要将 PUID 映射为用户,则您需要
实现自己的自定义代码。Windows 的未来版本可能会提供将 PUID 映射到 Windows 帐户
的本机支持。
保护 Passport
当 Passport 作为单机身份验证方法使用时,加密 Cookie 的本质使得 Passport 比较
安全。然而,为了避免重放攻击并维持最高安全级别,Passport 需要与 SSL 结合使用

实现
要实现 Passport,您需要在服务器中安装 Passport SDK。您还需要向 Passport 注册
以使用服务。您必须按如下方法配置 web.config 文件:
// web.config 文件
<system.web>
   <authentication mode="Passport" />
</system.web>
有关 Passport 服务的详细信息,请参阅:
Passport 身份验证提供程序(英文)
Passport 技术白皮书(英文)
Passport 开发人员信息(英文)
表单身份验证
表单身份验证是指接受用户凭据的自定义用户界面组件,例如,一个用户名和密码。现
在使用的许多 Internet 应用程序具有这种供用户登录的表单。值得注意的是,表单本
身并不执行身份验证,它仅仅是一种获得用户凭据的方法。身份验证是通过使用自定义
代码访问用户名和密码数据库来实现的。
验证用户身份后,服务器一般会通过某种方式向客户端表明其已经通过身份验证,可以
进行后续请求。如果需要,您可以强制用户验证每个请求,但这样会影响性能和可伸缩
性。您应考虑两种基本方法来识别以前登录过的客户端:
Cookie。Cookie 是最初由服务器向客户端发送的一小段数据。随后,由客户端随每个
HTTP 请求将其发送回服务器。它可以用作客户端已经通过身份验证的标志。ASP .NET
通过 CookieAuthenticationProvider 模块为您提供了使用 Cookie 进行表单身份验证
的机制。大多数 Web 浏览器(包括 Internet Explorer 和 Netscape Navigator)均支
持 Cookie。
自定义。您可以实现自己的自定义机制来向服务器标识客户端。如果您的客户端禁用了
Cookie,您可以考虑在每个 URL 查询字符串中存储一个唯一标识符。或者使用存储在永
久性顶级或不可见框架中的隐藏表单域。无论如何,您要确保黑客不能通过编程模拟成
已经通过应用程序身份验证的用户。
Cookie 广泛应用于使用表单身份验证的网站。.NET 的最初版本将仅支持使用 Cookie
的表单身份验证。
典型应用方案
以下情况下,您应考虑使用表单验证:
用户名和密码存储在 Windows 帐户以外的位置。请注意,Windows 帐户也可以使用表单
身份验证。
您要在 Internet 上部署应用程序。
您需要支持所有浏览器和客户端操作系统。
您希望为用户提供自己的用户界面表单作为登录页。
以下情况下,您不应考虑使用表单验证:
您要为公司 Intranet 部署应用程序,并且可以利用集成 Windows 身份验证。
您不能通过编程访问来验证用户名和密码。
其他考虑
选择表单身份验证时,您还应考虑以下问题。
保护表单身份验证
如果用户是通过登录页来提交密码的,您可以使用 SSL 来保护通道,以防密码被盗。如
果您使用 Cookie 来维护用户在各个请求之间的标识,您应当了解黑客通过网络监视程
序“盗用”用户 Cookie 的潜在危险。使用 Cookie 时,要使站点真正安全,唯一的方
法是站点内的所有通讯都使用 SSL。对大多数商业网站来说,由于这种方法的运行开销
太大,所以不切实际。使用 ASP .NET,您可以使服务器定期重生成 Cookie。这种使
Cookie 过期的策略是为了防止其他用户盗用 Cookie 访问站点。
性能和可伸缩性
设计大流量网站时,您需要考虑验证用户身份所带来的性能影响。如果您预计会有大量
用户同时登录,您需要尽快完成凭据确认过程。
如果使用 SSL,由于必须执行额外的加密步骤,性能会明显下降。在 Web 中,您应将实
现安全登录的服务器和内容服务器分开,以满足性能要求。
检查 Cookie 的存在
如果您使用的是 .NET,则检查 Cookie 存在的进程是自动实现的。但如果不使用 .NET
,则有两种基本方法:
实现 ISAPI 筛选器,它确认客户端请求中 Cookie 的存在,证明客户端已经通过身份验
证。如果 Cookie 存在,则允许请求继续。如果 Cookie 不存在,则将客户端重定向到
登录页。如上所述的 ISAPI 筛选器可以由 Microsoft Commerce Server 2000 实现。
您可以在每个 Web 页的开始处编写代码检查 Cookie 是否存在,或编写由 Web 页传递
的其他自定义值。如果标记不存在,代码可将用户重定向到登录页。这一实现方法很简
单;但是,您可能无法保护除 ASP 页以外的资源。例如,图像文件可能仍然可以访问。

如果您使用的是 ASP .NET,则可以利用表单身份验证提供的内置功能。
使用表单身份验证与 Windows 帐户
如果您部署的是 Internet 应用程序,而您的用户在服务器中具有 Windows 帐户,则可
以使用表单身份验证或 SSL 上的表单身份验证,以替代基本身份验证和简要身份验证。

如果您的应用程序基于 Intranet,并且已经在使用集成 Windows 身份验证,则表单身
份验证可能并非好的解决方案。您公司的安全策略可能也不允许用户将密码输入 HTML
表单。
实现
要实现表单身份验证,您必须创建自己的登录页并重定向未验证客户端的 URL。您还必
须创建自己的帐户查找方案。使用 ASP .NET,可以使用以下 Web.config 配置:
// web.config 文件


<

本文关键:ASP .NET 中的身份验证:.NET 安全性指导
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top