在接口代理级别设置安全性

有时,客户端需要在调用特定接口时对安全性进行精细控制。 例如,进程的安全性可能设置为低级别,但对特定接口的调用可能需要更高的身份验证级别,例如加密。 IClientSecurity 接口的方法允许客户端通过控制接口代理级别的安全设置,更改与调用特定接口关联的安全设置。

客户端可以查询 IClientSecurity 的现有对象,然后调用 IClientSecurity::QueryBlanket 方法,找出特定接口代理的当前安全设置。 IClientSecurity::SetBlanket 方法可用于在调用接口方法之一之前修改对象上单个接口代理的安全设置。 新设置适用于此特定接口的任何将来的调用方。 IClientSecurity::CopyProxy 方法为客户端提供复制接口代理的方法,以便对副本上的 SetBlanket 的后续调用不会影响原始代理的调用方。

SetBlanket 通常用于将特定接口代理的身份验证级别提升到更高的安全保护级别。 但是,在某些情况下,降低特定接口代理的身份验证级别可能也很有帮助。 例如,假设进程的默认身份验证级别不是 RPC_C_AUTHN_LEVEL_NONE,客户端和服务器位于不相互信任的单独域中。 在这种情况下,除非客户端调用 SetBlanket 将身份验证级别降低到 RPC_C_AUTHN_LEVEL_NONE,否则对服务器的调用将失败。

使用代理管理器提供的 IClientSecurity 的默认实现的客户端可以调用 CoQueryProxyBlanketCoSetProxyBlanketCoCopyProxy 帮助程序函数,而不是直接调用 IClientSecurity 方法。 虽然帮助程序函数简化了代码,但效率略低于直接调用相应的 IClientSecurity 方法。

代理管理器在本地为客户端实现 IClientSecurity 接口。 某些自定义封送对象可能不支持 IClientSecurity

IClientSecurity 适用于所有支持的身份验证服务(当前有 NTLMSSP、Schannel 和 Kerberos v5 协议)。

设置 COM 应用程序的安全性