本主题介绍一项传统技术,保留该技术是为了向后兼容现有的应用程序,不建议对新的开发使用该技术。现在应该使用 Windows Communication Foundation (WCF) 来开发分布式应用程序。
IPC 信道直接支持身份验证和模拟。本主题介绍如何配置客户端和服务器信道。
通过设置关联的 IpcServerChannel 和 IpcClientChannel 对象的属性,.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>
![]() |
---|
如果使用 IPC 信道身份验证,在将 impersonate 属性设置为 true 时,您还必须将 secure 属性设置为 true。 |
![]() |
---|
所有进程都在 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>
![]() |
---|
如果使用 IPC 信道身份验证,在将 tokenImpersonationLevel 属性设置为“impersonation”时,您还必须将 secure 属性设置为 true。为了实现模拟,必须将服务器信道上的 impersonate 属性设置为 true。请注意,在服务器上,该属性称为 impersonate,但在客户端上,需要将 tokenImpersonationLevel 设置为 impersonation。 |
![]() |
---|
所有进程都在 Windows Vista 上的标准用户帐户下运行。标准用户不能模拟管理员帐户。如果您有一个必须模拟管理员帐户的远程处理应用程序,则该应用程序必须在提升的特权下运行。 |
tokenImpersonationLevel 可以设置为下表中一个值。
tokenImpersonationLevel 设置 | 说明 |
---|---|
标识 |
服务器可以获取有关客户端的信息(如安全标识符和特权),但它无法模拟客户端。 |
模拟 |
服务器可以在其本地系统上模拟客户端的安全上下文。服务器无法在远程系统上模拟客户端。 |
委托 |
服务器可以在远程系统上模拟客户端。 |
![]() |
---|
IPC 信道不允许您以编程方式或者通过配置来指定备用凭据集。因此,客户端始终向服务器发送它运行时所用的凭据。 |
![]() |
---|
IPC 信道只使用 NTLM 进行身份验证。 |