共用方式為


RPC_HTTP_TRANSPORT_CREDENTIALS_V3_W結構 (rpcdce.h)

RPC_HTTP_TRANSPORT_CREDENTIALS_V3結構會定義其他認證,以在使用 RPC/HTTP 時向 RPC Proxy 伺服器或 HTTP Proxy 伺服器進行驗證。

RPC_HTTP_TRANSPORT_CREDENTIALS_V3 允許使用任意認證窗體來擴充 RPC_HTTP_TRANSPORT_CREDENTIALS_V2

語法

typedef struct _RPC_HTTP_TRANSPORT_CREDENTIALS_V3_W {
  RPC_AUTH_IDENTITY_HANDLE TransportCredentials;
  unsigned long            Flags;
  unsigned long            AuthenticationTarget;
  unsigned long            NumberOfAuthnSchemes;
  unsigned long            *AuthnSchemes;
  unsigned short           *ServerCertificateSubject;
  RPC_AUTH_IDENTITY_HANDLE ProxyCredentials;
  unsigned long            NumberOfProxyAuthnSchemes;
  unsigned long            *ProxyAuthnSchemes;
} RPC_HTTP_TRANSPORT_CREDENTIALS_V3_W, *PRPC_HTTP_TRANSPORT_CREDENTIALS_V3_W;

成員

TransportCredentials

RPC_AUTH_IDENTITY_HANDLE 結構形式表示之不透明驗證句柄的指標。

Flags

可以與位 OR 運算子結合的一組旗標。

意義
RPC_C_HTTP_FLAG_USE_SSL
指示 RPC 使用 SSL 與 RPC Proxy 通訊。
RPC_C_HTTP_FLAG_USE_FIRST_AUTH_SCHEME
設定時,RPC 會選擇 AuthnSchemes 陣列中的第一個配置,並嘗試向 RPC Proxy 進行驗證。 如果 RPC Proxy 不支援選取的驗證配置,則呼叫會失敗。 未設定時,RPC 用戶端會查詢 RPC Proxy 以取得支援的驗證配置,然後選擇一個。

AuthenticationTarget

指定驗證目標。

應設定為下列其中一個或兩個值:

意義
RPC_C_HTTP_AUTHN_TARGET_SERVER
從 HTTP 觀點向 RPC Proxy 進行驗證,這是 HTTP 伺服器。 這是最常見的值。
RPC_C_HTTP_AUTHN_TARGET_PROXY
針對 HTTP Proxy 進行驗證。 這個值不常見。

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 Proxy 進行匿名連線。 如果 IIS 傳回驗證挑戰,如果 RPC 用戶端也位於 AuthnScheme 陣列中,則 RPC 用戶端會選擇伺服器慣用的驗證配置。 如果伺服器慣用的配置不在 AuthnScheme 陣列中,則會從開始到完成周遊 AuthnScheme 陣列,如果找到伺服器也支援的配置,則會使用該驗證配置。

ServerCertificateSubject

包含具有預期伺服器主體名稱的選擇性字串。 主體名稱的格式與 RpcCertGeneratePrincipalName 所產生的格式相同 (如需詳細資訊,請參閱 主體名稱) 。 只有在使用 SSL 時,才會使用此成員。 在這種情況下,會根據產生的主體名稱檢查伺服器證書。 如果不符合,則會傳回錯誤。 此成員可讓客戶端驗證 RPC Proxy。

ProxyCredentials

針對 HTTP Proxy 伺服器進行驗證時,以 RPC_AUTH_IDENTITY_HANDLE 結構形式表示不透明驗證句柄的指標。 只有在 AuthenticationTarget 包含RPC_C_HTTP_AUTHN_TARGET_PROXY時,ProxyCredentials 才有效。

NumberOfProxyAuthnSchemes

對 HTTP Proxy 伺服器進行驗證時 ,ProxyAuthnSchemes 陣列中的元素數目。 NumberOfProxyAuthnSchemes 只有在 AuthenticationTarget 包含 RPC_C_HTTP_AUTHN_TARGET_PROXY時才有效。

ProxyAuthnSchemes

用戶端願意在向 HTTP Proxy 伺服器進行驗證時使用的驗證配置數位指標。 數位的每個元素都可以包含下列其中一個常數。 只有在 AuthenticationTarget 包含RPC_C_HTTP_AUTHN_TARGET_PROXY時,ProxyAuthnSchemes 才有效。

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。
如果使用 RpcBindingSetAuthInfoEx 函式的 Unicode 版本,也必須提供RPC_HTTP_TRANSPORT_CREDENTIALS_V3SEC_WINNT_AUTH_IDENTITY結構的 Unicode 版本,而且 TransportCredentials 中的 Flags 成員必須設定為 SEC_WINNT_AUTH_IDENTITY_UNICODE。 如果使用 RpcBindingSetAuthInfoEx 函式的 ANSI 版本,則必須提供RPC_HTTP_TRANSPORT_CREDENTIALS_V3SEC_WINNT_AUTH_IDENTITY結構的 ANSI 版本,而且 TransportCredentials 中的 Flags 成員必須設定為 SEC_WINNT_AUTH_IDENTITY_ANSI。

規格需求

需求
最低支援的用戶端 Windows 7 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 R2 [僅限桌面應用程式]
標頭 rpcdce.h (包含 Rpc.h)

另請參閱

主體名稱

RPC_HTTP_TRANSPORT_CREDENTIALS

RPC_HTTP_TRANSPORT_CREDENTIALS_V2

RPC_SECURITY_QOS

RPC_SECURITY_QOS_V2

RPC_SECURITY_QOS_V3

使用 RPC over HTTP 的遠端程序呼叫

RpcBindingSetAuthInfoEx

RpcCertGeneratePrincipalName

SEC_WINNT_AUTH_IDENTITY