Authentifizierung (BITS)

BITS unterstützt die Standardauthentifizierung, die Passport-Authentifizierung und verschiedene Authentifizierungsschemas für Herausforderungen und Antworten. Wenn der Server oder Proxy eine Benutzerauthentifizierung erfordert, verwenden Sie die IBackgroundCopyJob2::SetCredentials-Funktion , um die Anmeldeinformationen des Benutzers anzugeben. BITS verwendet die CryptoAPI , um die Anmeldeinformationen zu schützen.

Verwenden Sie zum Festlegen von Anmeldeinformationen für die Standardauthentifizierung die SetCredentials-Funktion , um den Benutzernamen und das Kennwort anzugeben. Sie sollten die Standardauthentifizierung nur mit https:// geschützten sicheren Websites verwenden. Andernfalls sind der Benutzername und das Kennwort für Benutzer sichtbar.

Es ist möglich, den Benutzernamen und das Kennwort in die URL einzubetten. Dies gilt nicht als bewährte Sicherheitspraxis und ist in RFC 3986 (Abschnitt 3.2.1) veraltet.

Für die Passport-Authentifizierung unterstützt BITS nur explizite Anmeldeinformationen, keine impliziten Anmeldeinformationen, die an das Konto gebunden sind.

Für die Anforderungs-/Antwortauthentifizierung gibt BITS die Identität des Benutzers an und verwendet Snego , um zu bestimmen, welche Anforderungs-/Antwortauthentifizierung verwendet werden soll, z. B. NTLM oder das Kerberos-Protokoll. Eine Liste der von BITS unterstützten Anforderungs-/Antwortschemas finden Sie unter BG_AUTH_SCHEME.

BITS-Aufträge können fehlschlagen, wenn für das virtuelle Verzeichnis auf dem Server eine anonyme Authentifizierung und ein anderes Authentifizierungsschema aktiviert sind und wenn ACLs das virtuelle Verzeichnis schützen oder Dateien herunterladen. Ein Auftrag schlägt beispielsweise mit "Zugriff verweigert" fehl, wenn für das virtuelle Verzeichnis die anonyme und integrierte Authentifizierung aktiviert ist und die Datei eine ACL enthält, die nur Ben das Lesen der Datei ermöglicht. Dies liegt daran, dass das virtuelle Verzeichnis anonymen Zugriff zulässt, sodass IIS Ben nicht explizit authentifiziert (Bens Anmeldeinformationen werden nicht für den Zugriff auf die Datei verwendet, und der Zugriff wird verweigert).

Verwenden impliziter Anmeldeinformationen

Um die impliziten Anmeldeinformationen (Anmeldeinformationen) des Benutzers für die NTLM- oder Kerberos-Authentifizierung zu verwenden, rufen Sie die IBackgroundCopyJob2::SetCredentials-Methode auf, und legen Sie die Member UserName und Password der BG_BASIC_CREDENTIALS-Struktur auf NULL fest. Wenn Sie implizite Anmeldeinformationen für einen Proxy angeben, verwendet BITS auch die impliziten Anmeldeinformationen für die Serverauthentifizierung, es sei denn, Sie geben explizite Serveranmeldeinformationen an.

Weitere Informationen zu Diensten finden Sie unter Dienstkonten und BITS.

Sie können auch den Registrierungswert LMCompatibilityLevel oder UseLMCompat ändern. Sie sollten diese Werte jedoch nur ändern, wenn Sie über eine vorhandene Anwendung verfügen, die nicht geändert werden kann, um die SetCredentials-Methode aufzurufen.

BITS verwendet implizite Anmeldeinformationen für die Authentifizierung, wenn der LmCompatibilityLevel-Registrierungswert zwei oder höher ist und Sie die SetCredentials-Methode nicht aufgerufen haben. Der vollständige Pfad zum LMCompatibilityLevel-Registrierungswert ist HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\LmCompatibilityLevel.

Beachten Sie, dass sich das Ändern des LMCompatibilityLevel-Registrierungswerts auf andere Anwendungen und Dienste auswirken kann, die auf dem Computer ausgeführt werden.

Wenn das Festlegen des LmCompatibilityLevel-Registrierungswerts ein Problem ist, können Sie den Registrierungswert UseLMCompat unter HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\BITS erstellen. Der Registrierungswert ist ein DWORD. In der folgenden Tabelle sind die möglichen Werte für UseLMCompat aufgeführt:

Wert BESCHREIBUNG
0 BITS sendet implizite Anmeldeinformationen, wenn der Server zur Eingabe von NTLM- oder Kerberos-Anmeldeinformationen auffordert.
1 BITS sendet implizite Anmeldeinformationen nur, wenn der LmCompatibilityLevel-Registrierungswert des Clientcomputers größer oder gleich 2 ist.
2 BITS sendet implizite Anmeldeinformationen nur, wenn die Anwendung die SetCredentials-Methode aufgerufen hat .

BITS verwendet den Standardwert "2" für den UseLMCompat-Registrierungswert , wenn der Registrierungswert nicht vorhanden ist.

Verwenden von Zertifikaten für die Client-/Serverauthentifizierung

Bei der sicheren Client/Server-Kommunikation können Clients und Server digitale Zertifikate verwenden, um sich gegenseitig zu authentifizieren. BITS unterstützt automatisch die zertifikatbasierte Serverauthentifizierung für sichere HTTP-Transporte. Rufen Sie entweder die Methode IBackgroundCopyJobHttpOptions::SetClientCertificateByID oder IBackgroundCopyJobHttpOptions::SetClientCertificateByName auf, um BITS als Clientzertifikat bereitzustellen, das für die gegenseitige Authentifizierung erforderlich ist.

Wenn eine Website ein SSL-Clientzertifikat akzeptiert, aber kein SSL-Clientzertifikat erfordert und der BITS-Auftrag kein Clientzertifikat angibt, schlägt der Auftrag mit ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED (0x80072f0c) fehl.

Behandeln authentifizierter Proxyszenarien, die benutzerspezifische Einstellungen erfordern

Wenn Sie BITS in einer Umgebung verwenden, die eine Proxyauthentifizierung erfordert, während Sie als Konto ohne verwendbare NTLM- oder Kerberos-Anmeldeinformationen in der Netzwerkdomäne des Computers ausgeführt werden, müssen Sie zusätzliche Schritte ausführen, um sich ordnungsgemäß zu authentifizieren, indem Sie die Anmeldeinformationen eines anderen Benutzerkontos verwenden, das über Anmeldeinformationen für die Domäne verfügt. Dies ist ein typisches Szenario, wenn Ihr BITS-Code als Systemdienst wie LocalService, NetworkService oder LocalSystem ausgeführt wird, da diese Konten nicht über verwendbare NTLM- oder Kerberos-Anmeldeinformationen verfügen.

Die in BITS verwendete Proxyerkennungslogik führt folgendes aus, wenn ein Netzwerkhilfstoken (BG_TOKEN_NETWORK) festgelegt wird:

Danach wird der Identitätswechsel des Hilfstokens für die Proxy- oder Serverauthentifizierung verwendet.

Ab Windows 10, Version 1809 (10.0; Build 17763), wird das Szenario des authentifizierten Proxys mit benutzerspezifischen Anmeldeinformationen vereinfacht.

  1. Rufen Sie die SetCredentials-Methode des BITS-Auftrags auf, wobei BG_AUTH_SCHEME_NEGOTIATE, UserName auf NULL, Password auf NULL und Target auf BG_AUTH_TARGET_PROXY festgelegt ist. Dies bewirkt, dass die impliziten Anmeldeinformationen des Benutzerkontos für die NTLM- und Kerberos-Authentifizierung mit dem Proxy und server verwendet werden.
  2. Rufen Sie IBackgroundCopyJob::SetProxySettings mit BG_JOB_PROXY_USAGE_PRECONFIG auf.
  3. QueryInterface für IBitsTokenOptions.
  4. Geben Sie die Identität des Benutzerkontos an, das Sie für NTLM-/Kerberos-Anmeldeinformationen verwenden.
  5. Rufen Sie SetHelperToken auf.
  6. Rufen Sie SetHelperTokenFlags mit BG_TOKEN_NETWORK auf.
  7. Identitätswechsel wiederherstellen.
  8. Setzen Sie die Auftragseinrichtung fort.
  9. Rufen Sie "Resume" für den Auftrag auf.

Vor Windows 10, Version 1809 (10.0; Build 17763), die richtige Benutzeridentität (die Identität des Hilfstokens) wird für die netzwerkbasierte Proxyerkennung (WPAD) und für die Proxyauthentifizierung verwendet, aber die tatsächliche Erkennung lokaler Proxyeinstellungen (IE) erfolgt immer mithilfe des Tokens des Auftragsbesitzers, auch wenn ein Hilfstoken konfiguriert ist. Um dieses Manko zu umgehen, können Sie die folgenden Schritte ausführen.

  1. Geben Sie die Identität des Benutzerkontos an, das Sie für NTLM-/Kerberos-Anmeldeinformationen verwenden.
  2. Rufen Sie die IE-Proxyeinstellungen des Benutzerkontos ab, indem Sie WinHttpGetIEProxyConfigForCurrentUser aufrufen.
  3. Identitätswechsel wiederherstellen.
  4. Rufen Sie die SetCredentials-Methode des BITS-Auftrags auf, wobei BG_AUTH_SCHEME_NEGOTIATE, UserName auf NULL, Password auf NULL und Target auf BG_AUTH_TARGET_PROXY festgelegt ist. Dies bewirkt, dass die impliziten Anmeldeinformationen des Benutzerkontos für die NTLM- und Kerberos-Authentifizierung mit dem Proxy und server verwendet werden.
  5. Wenn Schritt 2 benutzerspezifische Proxyeinstellungen ergeben hat (d. h. lpszProxy oder lpszProxyBypass sind nicht NULL), legen Sie die entsprechenden Auftragseinstellungen manuell fest, indem Sie SetProxySettings mit der BG_JOB_PROXY_USAGE_OVERRIDE Einstellung verwenden.
  6. Wenn Schritt 2 keine benutzerspezifischen Proxyeinstellungen ergeben hat, rufen Sie SetProxySettings mit BG_JOB_USAGE_PRECONFIG auf.
  7. QueryInterface für IBitsTokenOptions.
  8. Geben Sie die Identität des Benutzerkontos erneut an.
  9. Rufen Sie SetHelperToken auf.
  10. Rufen Sie SetHelperTokenFlags mit BG_TOKEN_NETWORK auf.
  11. Identitätswechsel wiederherstellen.
  12. Setzen Sie die Auftragseinrichtung fort.
  13. Rufen Sie "Resume" für den Auftrag auf.