Quality of Service (RPC)
Clientprogramme können die RpcBindingSetAuthInfoEx--Funktion anstelle der RpcBindingSetAuthInfo--Funktion verwenden, um eine authentifizierte Bindung zu erstellen. In diesem Beispiel übergeben sie einen Zeiger an eine RPC_SECURITY_QOS Struktur als letzten Parameter von RpcBindingSetAuthInfoEx. Diese Struktur enthält Informationen zur Dienstqualität. Clientprogramme können auch die Identitätsnachverfolgung angeben und den Identitätswechseltyp auswählen.
Verwenden Sie die Capabilities Member der RPC_SECURITY_QOS-Struktur, um festzulegen, welche Teile der Client-/Serveranwendung authentifiziert werden. Wenn RPC_C_QOS_CAPABILITIES_DEFAULT ausgewählt ist, authentifiziert die RPC-Laufzeitbibliothek den Client oder Server entsprechend dem Standardwert für den SSP. Standardmäßig authentifiziert der Kerberos-Protokoll-SSP sowohl den Client als auch den Server. Der Standardwert für alle anderen SSPs, die Microsoft bereitstellt, besteht darin, den Client auf dem Server zu authentifizieren, aber nicht die Authentifizierung des Servers für den Client.
Wenn sich der Client und der Server immer gegenseitig authentifizieren sollen, legen Sie das Capabilities Member der RPC_SECURITY_QOS-Struktur auf RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH fest. Einige Sicherheitsanbieter unterstützen möglicherweise keine gegenseitige Authentifizierung. Wenn RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH für solche Sicherheitsanbieter angegeben ist, wird ein Fehler zurückgegeben, wenn ein Remoteprozeduraufruf ausgeführt wird. Bei Verwendung des SCHANNEL-SSP ist es möglich, auch das Capabilities Member auf RPC_C_QOS_CAPABILITIES_ANY_AUTHORITY festzulegen. Diese Konstante gibt an, dass der SSP den Remoteprozeduraufruf überprüft, auch wenn sich die Zertifizierungsstelle, die das Authentifizierungszertifikat des Clients ausgestellt hat, nicht im Stammzertifikatspeicher des SSP befindet. Standardmäßig wird das Zertifikat abgelehnt, wenn der SSP die Zertifizierungsstelle nicht erkennt. Die Zertifizierungsstelle ist ein unabhängiges Unternehmen oder eine unabhängige Organisation, z. B. VeriSign, die Authentifizierungszertifikate ausgibt.
Anwendungen können auch die Identitätsnachverfolgung festlegen, die von der RPC-Laufzeitbibliothek verwendet wird. Programme verwenden in der Regel statische Identitätsnachverfolgung. Bei statischer Nachverfolgung werden die Anmeldeinformationen des Clients festgelegt, wenn die RpcBindingSetAuthInfo-Funktion aufgerufen wird. Die RPC-Laufzeitbibliothek verwendet dann diese Anmeldeinformationen für alle RPC-Aufrufe für die Bindung, unabhängig von Änderungen an der Identität des aufrufenden Threads oder des Aufrufvorgangs. Anwendungen können auch dynamische Identitätsnachverfolgungauswählen. Die dynamische Identitätsnachverfolgung weist die RPC-Laufzeitbibliothek an, die Anmeldeinformationen des aufrufenden Threads zum Zeitpunkt jedes Aufrufs anstelle des Bindungshandle zu verwenden. Die Standardmäßige Identitätsnachverfolgung ist statisch.
Wenn sich die Identität des Clients nicht ändern wird, kann die statische Identitätsnachverfolgung bessere Leistungsmerkmale aufweisen und die RPC-Laufzeit jedes Mal speichern, wenn die Identität im aufrufenden Thread mit der Identität übereinstimmt, die dem Sicherheitssystem gegeben ist. Wenn sich die Identität des Aufrufenthreads zwischen Aufrufen ändern kann und der Server diese Änderungen erkennen muss, empfiehlt es sich, die dynamische Identitätsnachverfolgung anzugeben– die RPC-Laufzeit wird ruhig und effizient nachverfolgt, und wenn sich die Identität ändert, verwaltet diese Änderung in Ihrem Auftrag.
Anmerkung
Für ncalrpc Aufrufe weisen statische und dynamische Identitätsnachverfolgung unterschiedliche Leistungsmerkmale auf, und je nach den Umständen kann beides schneller sein.
Im Rahmen der QOS-Spezifikation kann das Clientprogramm auch den Typ des Identitätswechsels festlegen, den ein Serverprogramm in seinem Auftrag ausführen kann. Weitere Informationen finden Sie unter Clientidentitätswechsel.
Das Versionsnummernfeld der RPC_SECURITY_QOS-Struktur sollte immer auf RPC_C_SECURITY_QOS_VERSION festgelegt werden.