将模拟用于传输安全

模拟 是服务器应用程序能够冒充客户端身份的能力。 服务在验证对资源的访问时常常使用模拟。 服务器应用程序使用服务帐户运行,但在服务器接受客户端连接时,它会模拟客户端,以便使用客户端的凭据执行访问检查。 传输安全性是一种机制,用于传递凭据并使用这些凭据保护通信。 本主题介绍如何在 Windows Communication Foundation(WCF)中使用传输安全性以及模拟功能。 有关使用消息安全性进行模拟的详细信息,请参阅 委派和模拟

五个冒充级别

传输安全使用五级模拟,如下表所述。

模拟级别 DESCRIPTION
没有 服务器应用程序不会尝试模拟客户端。
匿名 服务器应用程序可以针对客户端的凭据执行访问检查,但不会收到有关客户端标识的任何信息。 此模拟级别仅对计算机上的通信(例如命名管道)有意义。 将 Anonymous 用于远程连接会将模拟级别提高到 Identify。
识别 服务器应用程序知道客户端的标识,并且可以针对客户端的凭据执行访问验证,但无法模拟客户端。 在 WCF 中,Identify 是用于 SSPI 凭据的默认模拟级别,除非令牌提供程序提供其他模拟级别。
冒充 服务器应用程序除了执行访问检查外,还可以以客户端的形式访问服务器计算机上的资源。 服务器应用程序无法使用客户端标识访问远程计算机上的资源,因为模拟令牌没有网络凭据
委托 除了具有与委托模拟级别相同的功能 Impersonate外,服务器应用程序还可以使用客户端的标识访问远程计算机上的资源,并将标识传递给其他应用程序。

重要 服务器域帐户必须在域控制器上被标记为可委派受信任,才能使用这些附加功能。 此级别的模拟不能与标记为敏感的客户端域帐户一起使用。

最常用于传输安全性的级别是 IdentifyImpersonate。 级别 NoneAnonymous 不建议用于典型使用,并且许多传输不支持将这些级别与身份验证结合使用。 该 Delegate 级别是一项功能强大的功能,应谨慎使用。 应仅向受信任的服务器应用程序授予委派凭据的权限。

若要使用 ImpersonateDelegate 级别的模拟,服务器应用程序需要具有 SeImpersonatePrivilege 权限。 如果应用程序在管理员组中的帐户或具有服务 SID 的帐户(网络服务、本地服务或本地系统)上运行,则应用程序默认具有此权限。 模拟不要求客户端和服务器相互进行身份验证。 某些支持模拟的身份验证方案(如 NTLM)不能用于相互身份验证。

特定于传输协议的模拟问题

WCF 中选择的传输协议会影响可选的模拟。 本部分介绍影响 WCF 中标准 HTTP 和命名管道传输的问题。 自定义传输协议在对模拟的支持上有自己的限制。

命名管道传输协议

使用命名管道传输协议时,请注意以下事项:

  • 命名管道传输协议应仅用在本地计算机上。 WCF 中的命名管道传输显式禁止跨计算机连接。

  • 命名管道不能用在 ImpersonateDelegate 模拟级别上。 命名管道不能在这些模拟级别实施计算机上的保证。

有关命名管道的详细信息,请参阅选择传输

HTTP 传输

使用 HTTP 传输(WSHttpBindingBasicHttpBinding)的绑定支持多种身份验证方案,如 了解 HTTP 身份验证中所述。 支持的模拟级别取决于身份验证方案。 以下项用于 HTTP 传输:

  • 身份验证Anonymous方案忽略身份冒充。

  • 认证方案 Basic 仅支持 Delegate 级别。 所有低于此级别的模拟级别都会升级。

  • Digest 身份验证方案仅支持 ImpersonateDelegate 级别。

  • 可直接或通过协商选择的 NTLM 身份验证方案仅支持本地计算机上的 Delegate 级别。

  • Kerberos 身份验证方案(只能通过协商选择)可用于任何受支持的模拟级别。

有关 HTTP 传输的详细信息,请参阅 选择传输

另请参阅