RPC_HTTP_TRANSPORT_CREDENTIALS_V2_A 结构 (rpcdce.h)
RPC_HTTP_TRANSPORT_CREDENTIALS_V2结构定义使用 RPC/HTTP 时向 RPC 代理服务器或 HTTP 代理服务器进行身份验证的其他凭据。
RPC_HTTP_TRANSPORT_CREDENTIALS_V2 通过允许对 HTTP 代理服务器进行身份验证来扩展 RPC_HTTP_TRANSPORT_CREDENTIALS 。
语法
typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_V2_A {
SEC_WINNT_AUTH_IDENTITY_A *TransportCredentials;
unsigned long Flags;
unsigned long AuthenticationTarget;
unsigned long NumberOfAuthnSchemes;
unsigned long *AuthnSchemes;
unsigned char *ServerCertificateSubject;
SEC_WINNT_AUTH_IDENTITY_A *ProxyCredentials;
unsigned long NumberOfProxyAuthnSchemes;
unsigned long *ProxyAuthnSchemes;
} RPC_HTTP_TRANSPORT_CREDENTIALS_V2_A, *PRPC_HTTP_TRANSPORT_CREDENTIALS_V2_A;
成员
TransportCredentials
指向 SEC_WINNT_AUTH_IDENTITY 结构的指针,该结构包含用户的用户名、域和密码。
Flags
可与按位 OR 运算符组合的一组标志。
AuthenticationTarget
指定身份验证目标。
应设置为以下一个或两个值:
值 | 含义 |
---|---|
|
针对 RPC 代理进行身份验证,从 HTTP 的角度来看,该代理是 HTTP 服务器。 这是最常见的值。 |
|
针对 HTTP 代理进行身份验证。 此值不常见。 |
NumberOfAuthnSchemes
AuthnScheme 数组中的元素数。
AuthnSchemes
指向客户端愿意使用的身份验证方案数组的指针。 数组的每个元素都可以包含以下常量之一:
RPC_C_HTTP_AUTHN_SCHEME_BASIC
RPC_C_HTTP_AUTHN_SCHEME_NTLM
RPC_C_HTTP_AUTHN_SCHEME_PASSPORT
RPC_C_HTTP_AUTHN_SCHEME_DIGEST
RPC_C_HTTP_AUTHN_SCHEME_NEGOTIATE
RPC_C_HTTP_AUTHN_SCHEME_PASSPORT、RPC_C_HTTP_AUTHN_SCHEME_NEGOTIATE和RPC_C_HTTP_AUTHN_SCHEME_DIGEST定义为常量,但当前不受支持。 调用方不应指定它们;这样做会导致RPC_S_CANNOT_SUPPORT错误。 每个常量可以指定一次。 RPC 不会出于性能原因验证此限制,但多次指定常量会产生未定义的结果。
用于选择实际身份验证方案的算法如下所示:
如果指定了RPC_C_HTTP_FLAG_USE_FIRST_AUTH_SCHEME,则选择第一个身份验证方案。 如果服务器不支持,则建立连接会失败。 如果未指定RPC_C_HTTP_FLAG_USE_FIRST_AUTH_SCHEME,则 RPC 客户端首先尝试匿名连接到 RPC 代理。 如果 IIS 返回身份验证质询,则 RPC 客户端会选择服务器首选的身份验证方案(如果它也在 AuthnScheme 数组中)。 如果服务器首选的方案不在 AuthnScheme 数组中,则将从头到尾遍历 AuthnScheme 数组,如果找到服务器也支持的方案,则使用该身份验证方案。
ServerCertificateSubject
包含具有预期服务器主体名称的可选字符串。 主体名称的格式与为 RpcCertGeneratePrincipalName 生成的相同格式 (请参阅 主体名称 ,了解) 的详细信息。 仅当使用 SSL 时,才使用此成员。 在这种情况下,将对照生成的主体名称检查服务器证书。 如果不匹配,则返回错误。 此成员使客户端能够对 RPC 代理进行身份验证。
ProxyCredentials
指向 SEC_WINNT_AUTH_IDENTITY 结构的指针,该结构包含针对 HTTP 代理服务器进行身份验证时用户的用户名、域和密码。 ProxyCredentials 仅在 AuthenticationTarget 包含 RPC_C_HTTP_AUTHN_TARGET_PROXY时才有效。
NumberOfProxyAuthnSchemes
针对 HTTP 代理服务器进行身份验证时 ,ProxyAuthnSchemes 数组中的元素数。 NumberOfProxyAuthnSchemes 仅在 AuthenticationTarget 包含 RPC_C_HTTP_AUTHN_TARGET_PROXY时才有效。
ProxyAuthnSchemes
指向客户端在对 HTTP 代理服务器进行身份验证时愿意使用的身份验证方案数组的指针。 数组的每个元素都可以包含以下常量之一。 ProxyAuthnSchemes 仅在 AuthenticationTarget 包含 RPC_C_HTTP_AUTHN_TARGET_PROXY时才有效。
RPC_C_HTTP_AUTHN_SCHEME_BASIC
RPC_C_HTTP_AUTHN_SCHEME_NTLM
RPC_C_HTTP_AUTHN_SCHEME_PASSPORT
RPC_C_HTTP_AUTHN_SCHEME_DIGEST
RPC_C_HTTP_AUTHN_SCHEME_NEGOTIATE
注解
如果 TransportCredentials 成员为 NULL 且身份验证方案为 NTLM,则使用当前登录用户的凭据。 为了避免通过弱 LM 哈希在网络上公开用户凭据,仅当以下一个或两个条件成立时,才使用用户登录凭据:
- 调用方请求使用 SSL 并使用 ServerCertificateSubject 成员。 此方案保证凭据在传输过程中和最终目标位置都受到保护,即使使用了弱哈希。
- lncompatibilitylevel 键设置为 2 或更高。 这会导致 NTLM 安全提供程序仅发出或响应强 NT 哈希,而不是弱 LM 哈希。 此外,建议客户使用级别 3 或更高级别,这将尝试 NTLMv2。
要求
最低受支持的客户端 | Windows Vista [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 [仅限桌面应用] |
标头 | rpcdce.h (包括 Rpc.h) |
请参阅
RPC_HTTP_TRANSPORT_CREDENTIALS