65.9K
CodeProject 正在变化。 阅读更多。
Home

Windows身份验证机制概述

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.60/5 (22投票s)

2007年2月15日

7分钟阅读

viewsIcon

111025

本文概述了 Windows 上应用程序的各种身份验证机制。它还触及了 CardSapce 和 OpenID 等新兴技术。最后,文章将新的身份验证机制的发展与对单一登录 (SSO) 的基本需求演变联系起来。

背景

随着 Web 2.0 的兴起,身份管理正成为核心焦点。在线交易的安全性正引起包括微软在内的所有技术供应商的关注。微软最近发布的 .NET Framework 3.0 包括 Windows CardSpace,它为未来的身份管理奠定了坚实的基础。此外,微软最近宣布与 OpenID 合作,将 CardSpace 的举措提升到了新的水平。本文概述了 Microsoft Windows 平台上的各种身份验证机制。

引言

数字身份是与个人或设备相关联的一组特征,使我们能够将其与世界上的其他实体区分开来。

在授予对有价值资源的访问权限之前,会检查数字身份以确认请求的来源。此机制称为身份验证。

各种流行的身份验证机制包括

  1. 用户名和密码
  2. 数字证书
  3. 生物特征识别 – 指纹、虹膜/视网膜扫描
  4. 动态生物特征识别 – 签名、语音识别

Windows 操作系统中的身份验证

Microsoft Windows Server 2003 已将 Kerberos 5 采纳为网络身份验证的默认协议。Active Directory 仅仅是存储所有信息的目录。Kerberos 协议实现用于保护它并使其正常运行。

Microsoft Windows Server 2000 及更高版本使用以下作为默认身份验证机制

默认身份验证包 Kerberos
凭据存储 Active Directory
SAM (Security Authentication Module - 安全身份验证模块)
身份验证协议 明文
NTLM (NT LAN Manager - NT LAN 管理器)
标准 Kerberos
Kerberos PKINIT (Public Key cryptography for INITial Authentication - 用于初始身份验证的公钥加密)

所有身份验证协议都通过 SSPI (Security Support Provider Interface - 安全支持提供程序接口) 暴露。

下面显示了使用 Kerberos KDC (Key Distribution Center - 密钥分发中心) 的 Windows 身份验证过程。

Sample image

.NET 应用程序中的身份验证

.NET Framework 有一个模型,基于 Identity(身份)的概念来管理用户或自动化代理。Identity 对象封装了正在验证的用户或实体的相关信息。

基本 Identity 对象包含一个名称和一个身份验证类型。名称可以是用户的名称,也可以是 Windows 帐户的名称,而身份验证类型可以是受支持的登录协议(如 Kerberos V5)或自定义值。

namespace System.Security.Principal
{
    public interface IIdentity
    {
        bool IsAuthenticated { get; }
        string AuthenticationType { get; }
        string Name { get; }
    }
}

上面显示的 IIdentity 接口抽象了安全上下文的身份验证部分。

.NET Framework 定义了一个 GenericIdentity 对象,可用于大多数自定义登录场景,以及一个更专业的 WindowsIdentity 对象,当应用程序依赖于 Windows 身份验证时可以使用。此外,还可以定义自己的 Identity 类来封装自定义用户信息。

Web 应用程序身份验证

ASP.NET 通过身份验证提供程序来实现身份验证。提供程序基本上是包含 Public Static 方法的类,用于帮助对来自客户端的请求进行身份验证。

ASP.NET 应用程序可以配置为使用以下身份验证提供程序之一

1. Windows 身份验证

WindowsAuthenticationModule 提供程序依赖 IIS 提供已身份验证的用户。提供程序模块构建一个 Windows Identity 对象。默认实现构建一个 WindowsPrincipal 对象并将其附加到应用程序上下文。Windows 身份验证的主要优势之一是允许实现模拟方案。

Sample image

2. 表单身份验证

如果应用程序需要在登录时通过 HTML 表单收集自己的用户凭据,则建议使用表单身份验证。所有未经授权的请求都会使用 HTTP 客户端重定向到登录页面。表单身份验证提供程序可以实现自定义逻辑,以根据身份存储验证用户名和密码。如果应用程序身份验证了请求,系统会颁发一个包含密钥的票证,用于重新建立后续请求的身份。

Sample image

3. Passport 身份验证

Passport 身份验证是微软的集中式身份验证服务,为成员网站提供单一登录和核心配置文件服务。Passport 使用 Triple DES 加密方案。当成员网站注册 Passport 时,它们会获得一个特定于站点的密钥。Passport 登录服务器使用此密钥加密和解密在站点之间传递的查询字符串。身份验证票证由客户端在 cookie 中保留,并用于应用程序将来的所有请求,直到 cookie 过期。

Sample image

Web 服务身份验证

Web 服务的身份验证可分为以下两种模型

1. 直接身份验证

在直接身份验证模型中,客户端和服务建立直接信任。客户端应用程序将凭据与服务请求一起直接发送到服务。服务维护授权客户端的目录,身份验证机制内置于服务组件中。此模型可以被认为类似于 Web 应用程序的表单身份验证,因为这两种机制都不需要任何中介来建立信任。

Sample image

2. 代理身份验证

在代理身份验证中,当客户端和服务不共享信任关系时,有一个称为“代理”的中介来执行身份验证。凭据用于与代理进行身份验证,代理会颁发安全令牌。然后使用安全令牌与服务进行身份验证。

Sample image

WSE (Web Services Enhancement - Web 服务增强) 提供了支持代理身份验证的 3 种主要安全令牌。

I. X.509

这需要支持 PKI (Public Key Infrastructure - 公钥基础设施)。在只需要少量证书的情况下,可以使用外部 CA (Certificate Authority - 证书颁发机构)。大多数 X.509 实现,如 SSL,会交换一个用于加密的对称会话密钥。

II. KerberosToken

这需要一个支持 Kerberos 协议的身份提供程序,例如 Active Directory。服务票证是基于会话的令牌,可用于机密性和完整性。

III. STS (Security Token Service - 安全令牌服务)

这需要一个颁发和管理安全令牌的 STS 实现。自定义安全令牌可用于基于会话的操作。

CardSpace 身份验证

Windows CardSpace 是一项旨在消除对用户名和密码的需求的技术。相反,它将为 Windows 用户提供以卡片形式呈现的数字身份,用户可以以安全且熟悉的方式访问这些卡片。

CardSpace 提供了一个身份选择器和一个自颁发身份提供程序,它们都运行在客户端计算机上。CardSpace 是一种跨信任边界进行强身份验证的新方法。如果安装了 Internet Explorer 7,它将使用 Windows CardSpace。

Windows CardSpace 使用以下可互操作的协议 - WS-Security, WS-SecurityPolicy, WS-Trust 和 WS-MetadataExchange。

身份提供程序提供卡片(.crd 文件),其中包含元数据信息。此卡片用于从身份提供程序获取安全令牌,以便将声明发送到依赖方。

Sample image

OpenID 身份验证

OpenID 使用 XRI (eXtensible Resource Identifier - 可扩展资源标识符) 来验证数字身份。CardSpace 可以通过使用 WS-Trust 和 WS-MetadataExchange 建立客户端和 OP 之间的关系来在 OpenID 身份验证过程中发挥补充作用。这可能有助于消除身份验证过程中的步骤 4 和 5。此外,Card 还可以额外携带 XRI 以及 OP 令牌。

Sample image

结论

SSO (Single sign-on - 单一登录) 是一种软件身份验证形式,它允许用户在一个软件系统中进行一次身份验证,然后就可以访问多个软件系统。Windows 操作系统身份验证是主要的身份验证,因此基于它来进行 SSO 是理想的选择,以便在 Windows 会话中访问所有应用程序,而无需(重新)输入凭据。互联网为用户提供了大量通常在 B2C 场景中可用的应用程序,每个应用程序都需要用户经过其自身的注册和身份验证过程。除了 SSO,对于建立信任的通用、安全且可靠的机制也存在需求。随着技术的不断发展和开放标准的广泛接受,“可信 SSO”的愿景将不再遥远。

参考文献

  1. Web 服务安全 - 微软模式与实践指南
  2. OpenID 身份验证 2.0 - 草案 11
  3. Microsoft Windows Server 2003 身份验证:幕后探秘,作者 Richard Ward

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.