服务质量(RPC)

客户端程序可以使用 RpcBindingSetAuthInfoEx 函数,而不是 RpcBindingSetAuthInfo 函数来创建经过身份验证的绑定。 如果这样做,则会将指向 RPC_SECURITY_QOS 结构的指针作为 RpcBindingSetAuthInfoEx的最终参数传递。 此结构包含有关服务质量的信息。 客户端程序还可以指定标识跟踪并选择模拟类型。

使用 功能RPC_SECURITY_QOS 结构的成员来设置对客户端/服务器应用程序的哪些部分进行身份验证。 如果选择RPC_C_QOS_CAPABILITIES_DEFAULT,RPC 运行时库将根据 SSP 的默认值对客户端或服务器进行身份验证。 默认情况下,Kerberos 协议 SSP 对客户端和服务器进行身份验证。 Microsoft提供的其他所有 SSP 的默认值是向服务器验证客户端,但不向客户端验证服务器。

如果客户端和服务器应始终相互进行身份验证,请将 功能RPC_SECURITY_QOS 结构的成员设置为RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH。 某些安全提供程序可能不支持相互身份验证。 如果为此类安全提供程序指定了RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH,则会在进行远程过程调用时返回错误。 使用 SCHANNEL SSP 时,还可以将 功能 成员设置为RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY。 此常量指定,即使颁发客户端身份验证证书的证书颁发机构不在 SSP 的根证书存储中,SSP 也应验证远程过程调用。 如果 SSP 无法识别证书颁发机构,则默认拒绝证书。 证书颁发机构是颁发身份验证证书的独立公司或组织,例如 VeriSign。

应用程序还可以设置 RPC 运行时库使用的标识跟踪。 程序通常使用 静态标识跟踪。 使用静态跟踪,客户端的凭据在调用 RpcBindingSetAuthInfo 函数时设置。 然后,无论调用线程或调用进程的标识发生更改,RPC 运行时库都会将这些凭据用于绑定上的所有 RPC 调用。 应用程序还可以选择 动态标识跟踪。 动态标识跟踪指示 RPC 运行时库在每个调用时使用调用线程的凭据,而不是绑定句柄。 默认标识跟踪是静态的。

如果客户端的标识不会更改,静态标识跟踪可以具有更好的性能特征,并且每次检查调用线程上的标识是否与提供给安全系统的标识相同时,都可以节省 RPC 运行时。 如果调用线程的标识在调用之间可能会更改,并且服务器需要识别这些更改,最好是指定动态标识跟踪 —RPC 运行时安静高效地跟踪标识,以及标识是否更改,代表你管理该更改。

注意

对于 ncalrpc 调用,静态和动态标识跟踪具有不同的性能特征,根据情况,两者可能更快。

 

作为 QOS 规范的一部分,客户端程序还可以设置服务器程序可以代表其执行的模拟类型。 有关详细信息,请参阅 客户端模拟

RPC_SECURITY_QOS 结构的版本号字段应始终设置为RPC_C_SECURITY_QOS_VERSION。