使用 IPC 信道进行身份验证

本主题介绍一项传统技术,保留该技术是为了向后兼容现有的应用程序,不建议对新的开发使用该技术。现在应该使用  Windows Communication Foundation (WCF) 来开发分布式应用程序。

IPC 信道直接支持身份验证和模拟。本主题介绍如何配置客户端和服务器信道。

通过设置关联的 IpcServerChannelIpcClientChannel 对象的属性,.NET Framework 允许远程对象的服务器对调用方进行身份验证和模拟。与 HTTP 和 TCP 信道不同,IPC 信道默认情况下执行身份验证。创建 IpcServerChannel 时,会为该信道创建访问控制列表 (ACL)**。默认情况下,ACL 仅包含服务器应用程序运行时使用的凭据。若要与该信道通信,客户端(以及 IpcClientChannel)必须使用相同的凭据运行。但是,您可以在 IPC 服务器信道配置中指定一个 Windows 用户或用户组,以允许该用户或用户组访问该信道。

服务器配置

如果您希望 IPC 信道可以由运行服务器应用程序的用户之外的其他用户访问,您可以在 authorizedGroup 属性中指定一个用户或用户组。下面的配置文件允许 Users 组中的所有用户访问 IPC 信道。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <service>
                <wellknown mode="SingleCall" type="Server.MyRemoteObject, Server" objectUri="MyRemoteObject.rem" />
            </service>
            <channels>
        <channel ref="ipc" portName="MyIpcChannel" authorizedGroup="Users"/>
            </channels>
        </application>
    </system.runtime.remoting>
</configuration>

IPC 信道还支持模拟。这由 impersonate 属性在服务器上控制。下面的配置可打开模拟功能。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <service>
                <wellknown mode="SingleCall" type="Microsoft.Samples.Implementation.ImplementationClass, Server" objectUri="server.rem" />
            </service>
            <channels>
        <channel ref="ipc" portName="MyIpcChannel" secure="true" impersonate="true" authorizedGroup="Users"/>
            </channels>
        </application>
    </system.runtime.remoting>
</configuration>
ms172351.note(zh-cn,VS.100).gif注意:
如果使用 IPC 信道身份验证,在将 impersonate 属性设置为 true 时,您还必须将 secure 属性设置为 true

ms172351.note(zh-cn,VS.100).gif注意:
所有进程都在 Windows Vista 上的标准用户帐户下运行。标准用户不能模拟管理员帐户。如果您有一个必须模拟管理员帐户的远程处理应用程序,则该应用程序必须在提升的特权下运行。

对于通过身份验证的客户端,可通过以下方式访问其身份:首先获取 CurrentPrincipal,然后访问其 Identity 属性。模拟客户端的身份可以通过 GetCurrent 访问。然后可以根据需要执行您自己的授权。

IPC 信道始终使用 NTLM 身份验证。IPC 不支持 Kerberos,因为 IPC 只限于单台计算机中的调用。

客户端配置

若要配置客户端 IPC 信道使用模拟,请将 tokenImpersonationLevel 属性设置为 impersonation,如下面的配置文件所示。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.runtime.remoting>
        <application>
            <channels>
              <channel ref="ipc" secure="true" tokenImpersonationLevel="impersonation" />
             </channels>
        </application>
    </system.runtime.remoting>
</configuration>
ms172351.note(zh-cn,VS.100).gif注意:
如果使用 IPC 信道身份验证,在将 tokenImpersonationLevel 属性设置为“impersonation”时,您还必须将 secure 属性设置为 true。为了实现模拟,必须将服务器信道上的 impersonate 属性设置为 true。请注意,在服务器上,该属性称为 impersonate,但在客户端上,需要将 tokenImpersonationLevel 设置为 impersonation

ms172351.note(zh-cn,VS.100).gif注意:
所有进程都在 Windows Vista 上的标准用户帐户下运行。标准用户不能模拟管理员帐户。如果您有一个必须模拟管理员帐户的远程处理应用程序,则该应用程序必须在提升的特权下运行。

tokenImpersonationLevel 可以设置为下表中一个值。

tokenImpersonationLevel 设置 说明

标识

服务器可以获取有关客户端的信息(如安全标识符和特权),但它无法模拟客户端。

模拟

服务器可以在其本地系统上模拟客户端的安全上下文。服务器无法在远程系统上模拟客户端。

委托

服务器可以在远程系统上模拟客户端。

ms172351.note(zh-cn,VS.100).gif注意:
IPC 信道不允许您以编程方式或者通过配置来指定备用凭据集。因此,客户端始终向服务器发送它运行时所用的凭据。

ms172351.note(zh-cn,VS.100).gif注意:
IPC 信道只使用 NTLM 进行身份验证。

另请参见

概念

使用 HTTP 信道进行身份验证
使用 TCP 信道进行身份验证
加密和消息完整性