Autentikasi (BITS)

BITS mendukung autentikasi Dasar, Autentikasi paspor, dan beberapa skema autentikasi tantangan/respons. Jika server atau proksi memerlukan autentikasi pengguna, gunakan fungsi IBackgroundCopyJob2::SetCredentials untuk menentukan kredensial pengguna. BITS menggunakan CryptoAPI untuk melindungi kredensial.

Untuk mengatur kredensial untuk autentikasi Dasar, gunakan fungsi SetCredentials untuk menentukan nama pengguna dan kata sandi. Anda hanya boleh menggunakan autentikasi Dasar dengan situs web aman yang dilindungi https://; jika tidak, nama pengguna dan kata sandi akan terlihat oleh pengguna.

Anda dapat menyematkan nama pengguna dan kata sandi di URL. Ini tidak dianggap sebagai praktik keamanan yang baik, dan tidak digunakan lagi dalam RFC 3986 (bagian 3.2.1).

Untuk autentikasi Paspor , BITS hanya mendukung kredensial eksplisit, bukan kredensial implisit yang terkait dengan akun.

Untuk autentikasi tantangan/respons, BITS meniru pengguna dan menggunakan Snego untuk menentukan autentikasi tantangan/respons mana yang akan digunakan, seperti NTLM atau protokol Kerberos. Untuk daftar skema tantangan/respons yang didukung BITS, lihat BG_AUTH_SCHEME.

Pekerjaan BITS dapat gagal jika direktori virtual di server memiliki autentikasi anonim dan skema autentikasi lain diaktifkan dan jika ACL melindungi direktori virtual atau mengunduh file. Misalnya, pekerjaan gagal dengan "akses ditolak" jika direktori virtual mengaktifkan autentikasi anonim dan terintegrasi dan file berisi ACL yang hanya memungkinkan Ben untuk membaca file. Ini terjadi karena direktori virtual memungkinkan akses anonim, sehingga IIS tidak secara eksplisit mengautentikasi Ben (kredensial Ben tidak digunakan untuk mengakses file dan akses ditolak).

Menggunakan kredensial implisit

Untuk menggunakan kredensial implisit (masuk) pengguna untuk autentikasi NTLM atau Kerberos, panggil metode IBackgroundCopyJob2::SetCredentials dan atur anggota UserName dan Password dari struktur BG_BASIC_CREDENTIALS ke NULL. Jika Anda menentukan kredensial implisit untuk proksi, BITS juga akan menggunakan kredensial implisit untuk autentikasi server kecuali Anda menentukan kredensial server eksplisit.

Untuk informasi tambahan untuk layanan, lihat Akun Layanan dan BITS.

Anda juga dapat mengubah nilai registri LMCompatibilityLevel atau UseLMCompat ; namun, Anda harus mengubah nilai-nilai ini hanya jika Anda memiliki aplikasi yang ada yang tidak dapat diubah untuk memanggil metode SetCredentials .

BITS akan menggunakan kredensial implisit untuk autentikasi jika nilai registri LMCompatibilityLevel adalah dua atau lebih besar, dan Anda belum memanggil metode SetCredentials. Jalur lengkap ke nilai registri LMCompatibilityLevel adalah HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\LmCompatibilityLevel.

Perhatikan bahwa mengubah nilai registri LMCompatibilityLevel dapat memengaruhi aplikasi dan layanan lain yang berjalan di komputer.

Jika mengatur nilai registri LMCompatibilityLevel adalah masalah, Anda dapat membuat nilai registri UseLMCompat di bawah HKEY_LOCAL_MACHINE\Perangkat Lunak\Microsoft\Windows\CurrentVersion\BITS. Nilai registri adalah DWORD. Tabel berikut ini mencantumkan nilai yang mungkin untuk UseLMCompat:

Nilai Deskripsi
0 BITS akan mengirim kredensial implisit setiap kali server meminta kredensial NTLM atau Kerberos.
1 BITS akan mengirim kredensial implisit hanya jika nilai registri LMCompatibilityLevel komputer klien lebih besar dari atau sama dengan 2.
2 BITS akan mengirim kredensial implisit hanya jika aplikasi yang disebut metode SetCredentials.

BITS akan menggunakan nilai default "2" untuk nilai registri UseLMCompat jika nilai registri tidak ada.

Menggunakan sertifikat untuk autentikasi klien/server

Dalam komunikasi klien/server yang aman, klien dan server dapat menggunakan sertifikat digital untuk saling mengautentikasi satu sama lain. BITS secara otomatis mendukung autentikasi server berbasis sertifikat untuk transportasi HTTP yang aman. Untuk menyediakan BITS sertifikat klien yang diperlukan untuk autentikasi bersama, panggil metode IBackgroundCopyJobHttpOptions::SetClientCertificateByID atau IBackgroundCopyJobHttpOptions::SetClientCertificateByName.

Ketika situs web menerima tetapi tidak memerlukan sertifikat klien SSL, dan pekerjaan BITS tidak menentukan sertifikat klien, pekerjaan akan gagal dengan ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED (0x80072f0c).

Cara menangani skenario proksi terautentikasi yang memerlukan pengaturan khusus pengguna

Jika Anda menggunakan BITS di lingkungan yang memerlukan autentikasi proksi saat berjalan sebagai akun tanpa kredensial NTLM atau Kerberos yang dapat digunakan di domain jaringan komputer, Anda harus mengambil langkah tambahan untuk mengautentikasi dengan benar dengan menggunakan kredensial akun pengguna lain yang memang memiliki kredensial pada domain. Ini adalah skenario umum ketika kode BITS Anda berjalan sebagai layanan sistem seperti LocalService, NetworkService, atau LocalSystem, karena akun tersebut tidak memiliki kredensial NTLM atau Kerberos yang dapat digunakan.

Logika deteksi proksi yang digunakan dalam BITS melakukan hal berikut ketika token pembantu jaringan (BG_TOKEN_NETWORK) diatur:

  • Jika IBackgroundCopyJob::SetProxy Pengaturan dipanggil dengan BG_JOB_PROXY_USAGE_PRECONFIG, baca pengaturan proksi IE lokal menggunakan peniruan konteks token pemilik pekerjaan melalui WinHttpGetIEProxyConfigForCurrentUser. Mulai dari Windows 10, versi 1809 (10.0; Build 17763), identitas token pembantu digunakan untuk langkah ini.
  • Jika IBackgroundCopyJob::SetProxy Pengaturan dipanggil dengan BG_PROXY_USAGE_AUTODETECT atau jika pengaturan IE dari kasus BG_JOB_PROXY_USAGE_PRECONFIG menentukan deteksi otomatis atau URL konfigurasi otomatis, maka lakukan deteksi proksi otomatis, atau Web Proxy Autodiscovery Protocol (WPAD), menggunakan peniruan token pembantu melalui WinHttpGetProxyForUrl.

Setelah itu, peniruan token pembantu digunakan untuk autentikasi proksi atau server di seluruh.

Mulai dari Windows 10, versi 1809 (10.0; Build 17763), skenario proksi terautentikasi dengan kredensial khusus pengguna disederhanakan.

  1. Panggil metode SetCredentials pekerjaan BITS dengan BG_AUTH_SCHEME_NEGOTIATE, UserName diatur ke NULL, Kata sandi diatur ke NULL, dan Target diatur ke BG_AUTH_TARGET_PROXY. Hal ini menyebabkan kredensial implisit akun pengguna digunakan untuk autentikasi NTLM dan Kerberos dengan proksi dan server.
  2. Panggil IBackgroundCopyJob::SetProxy Pengaturan dengan BG_JOB_PROXY_USAGE_PRECONFIG.
  3. QueryInterface untuk IBitsTokenOptions.
  4. Meniru akun pengguna yang Anda gunakan untuk kredensial NTLM/Kerberos.
  5. Panggil SetHelperToken.
  6. Panggil SetHelperTokenFlags dengan BG_TOKEN_NETWORK.
  7. Mengembalikan peniruan identitas.
  8. Lanjutkan penyiapan pekerjaan.
  9. Hubungi Lanjutkan pada pekerjaan.

Sebelum Windows 10, versi 1809 (10.0; Build 17763), identitas pengguna yang benar (identitas token pembantu) digunakan untuk deteksi proksi berbasis jaringan (WPAD) dan untuk autentikasi proksi, tetapi deteksi aktual pengaturan proksi lokal (IE) selalu dilakukan menggunakan token pemilik pekerjaan, bahkan ketika token pembantu dikonfigurasi. Untuk mengatasi kekurangan ini, Anda dapat mengikuti langkah-langkah ini.

  1. Meniru akun pengguna yang Anda gunakan untuk kredensial NTLM/Kerberos.
  2. Ambil pengaturan proksi IE akun pengguna dengan memanggil WinHttpGetIEProxyConfigForCurrentUser.
  3. Mengembalikan peniruan identitas.
  4. Panggil metode SetCredentials pekerjaan BITS dengan BG_AUTH_SCHEME_NEGOTIATE, UserName diatur ke NULL, Kata sandi diatur ke NULL, dan Target diatur ke BG_AUTH_TARGET_PROXY. Hal ini menyebabkan kredensial implisit akun pengguna digunakan untuk autentikasi NTLM dan Kerberos dengan proksi dan server.
  5. Jika langkah 2 menghasilkan pengaturan proksi khusus pengguna (yaitu lpszProxy atau lpszProxyBypass tidak NULL), atur pengaturan pekerjaan yang sesuai secara manual, menggunakan SetProxy Pengaturan dengan pengaturan BG_JOB_PROXY_USAGE_OVERRIDE.
  6. Jika langkah 2 tidak menghasilkan pengaturan proksi khusus pengguna, panggil SetProxy Pengaturan dengan BG_JOB_USAGE_PRECONFIG.
  7. QueryInterface untuk IBitsTokenOptions.
  8. Meniru akun pengguna lagi.
  9. Panggil SetHelperToken.
  10. Panggil SetHelperTokenFlags dengan BG_TOKEN_NETWORK.
  11. Mengembalikan peniruan identitas.
  12. Lanjutkan penyiapan pekerjaan.
  13. Hubungi Lanjutkan pada pekerjaan.