使用 TCP 信道进行身份验证
通常让远程过程标识调用方并采用与该标识关联的权限运行是很有用的。建议采用上述做法,因为这样做有助于防止恶意调用方滥用远程过程来执行未经授权的操作。
.NET Framework 通过设置关联的 TcpServerChannel 和 TcpClientChannel 对象的配置属性,允许远程对象的服务器标识和模拟调用方。
服务器配置
要配置服务器 TCP 信道,以便对远程调用方进行身份验证,请使用 TcpServerChannel 对象的 authenticationMode 配置属性,该属性可被设置为 AuthenticationMode 枚举的任何成员。如果 authenticationMode 设置为 IdentifyCallers,则信道将要求所有调用方都提供可验证的用户标识。如果 authenticationMode 设置为 ImpersonateCallers,则使用提供的标识执行对服务器的所有操作。有关如何以编程方式设置 authenticationMode 配置属性的示例,请参见如何:设置 authenticationMode 配置属性。
可以从作为 __remotePrincipal 数据的 CallContext 类来获取经过身份验证的客户端的标识。
客户端配置
要配置客户端 TCP 信道以标识远程服务器的调用方,请使用 TcpClientChannel 对象的 impersonationLevel 配置属性,该属性可被设置为 ClientImpersonationLevel 枚举的任何成员。如果 impersonationLevel 设置为 None,则对远程服务器进行的所有调用都是匿名的。如果 impersonationLevel 设置为 Identify,则客户端将标识远程服务器的调用方。如果 impersonationLevel 设置为 Impersonate,则客户端将允许以提供的标识执行远程调用。如果 impersonationLevel 设置为 Delegate,则服务器可反过来传递客户端标识。如果远程服务器要求比客户端允许级别更高的 impersonationLevel(例如,authenticationMode 设置为 IdentifyCallers,impersonationLevel 设置为 None;或者,authenticationMode 设置为 ImpersonateCallers,impersonationLevel 设置为 Identify),将引发异常。
默认情况下,TCP 客户端信道通过运行客户端进程所使用的用户标识对自身进行身份验证。您可以通过将 useDefaultCredentials 配置属性设置为 false,并设置 domain、username 和 password 配置属性以指定一个替代的标识。
可以对 TCP 客户端信道进行配置,以确定是否基于复杂的编程逻辑进行身份验证。如果将 authenticationPolicy 配置属性设置为实现 IAuthenticationPolicy 接口的对象,则调用该对象的 ValidateSecurityPackage 方法以确定身份验证是否继续。
有关说明如何在配置文件中设置 TCP 客户端信道以执行身份验证的示例,请参见如何:设置 TCP 客户端信道以执行身份验证。
请参见
任务
如何:设置 authenticationMode 配置属性
如何:设置 TCP 客户端信道以执行身份验证
参考
AuthenticationMode
ClientImpersonationLevel