Autenticación (BITS)
BITS admite la autenticación básica, la autenticación de Passport y varios esquemas de autenticación de desafío y respuesta. Si el servidor o proxy requiere autenticación de usuario, use la función IBackgroundCopyJob2::SetCredentials para especificar las credenciales del usuario. BITS usa CryptoAPI para proteger las credenciales.
Para establecer credenciales para la autenticación básica, use la función SetCredentials para especificar el nombre de usuario y la contraseña. Solo debe usar la autenticación básica con https:// sitios web seguros protegidos; de lo contrario, el nombre de usuario y la contraseña serán visibles para los usuarios.
Es posible insertar el nombre de usuario y la contraseña en la dirección URL. Esto no se considera una buena práctica de seguridad y está en desuso en RFC 3986 (sección 3.2.1).
Para la autenticación de Passport , BITS solo admite credenciales explícitas, no credenciales implícitas asociadas a la cuenta.
Para la autenticación de desafíos y respuestas, BITS suplanta al usuario y usa Snego para determinar qué autenticación de desafío/respuesta se va a usar, como NTLM o el protocolo Kerberos. Para obtener una lista de esquemas de desafío y respuesta compatibles con BITS, consulte BG_AUTH_SCHEME.
Los trabajos de BITS pueden producir un error si el directorio virtual del servidor tiene habilitada la autenticación anónima y otro esquema de autenticación habilitado y si las ACL protegen el directorio virtual o descargan archivos. Por ejemplo, se produce un error en un trabajo con el "acceso denegado" si el directorio virtual tiene habilitada la autenticación anónima e integrada y el archivo contiene una ACL que solo permite a Ben leer el archivo. Esto ocurre porque el directorio virtual permite el acceso anónimo, por lo que IIS no autentica explícitamente Ben (las credenciales de Ben no se usan para acceder al archivo y se deniega el acceso).
Uso de credenciales implícitas
Para usar las credenciales implícitas (de inicio de sesión) del usuario para la autenticación NTLM o Kerberos, llame al método IBackgroundCopyJob2::SetCredentials y establezca los miembros UserName y Password de la estructura de BG_BASIC_CREDENTIALS en NULL. Si especifica credenciales implícitas para un proxy, BITS también usará las credenciales implícitas para la autenticación del servidor a menos que especifique credenciales de servidor explícitas.
Para obtener más información sobre los servicios, vea Cuentas de servicio y BITS.
También puede cambiar el valor del Registro LMCompatibilityLevel o UseLMCompat ; Sin embargo, solo debe cambiar estos valores si tiene una aplicación existente que no se puede cambiar para llamar al método SetCredentials .
BITS usará credenciales implícitas para la autenticación si el valor del Registro LMCompatibilityLevel es de dos o más, y no ha llamado al método SetCredentials . La ruta de acceso completa al valor del Registro LMCompatibilityLevel es HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\LmCompatibilityLevel.
Tenga en cuenta que cambiar el valor del Registro LMCompatibilityLevel puede afectar a otras aplicaciones y servicios que se ejecutan en el equipo.
Si establecer el valor del Registro LMCompatibilityLevel es un problema, puede crear el valor del Registro UseLMCompat en HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\BITS. El valor del Registro es un DWORD. En la tabla siguiente se enumeran los valores posibles para UseLMCompat:
Valor | Descripción |
---|---|
0 | BITS enviará credenciales implícitas cada vez que el servidor solicite las credenciales NTLM o Kerberos. |
1 | BITS enviará credenciales implícitas solo si el valor del Registro LMCompatibilityLevel del equipo cliente es mayor o igual que 2. |
2 | BITS enviará credenciales implícitas solo si la aplicación llamó al método SetCredentials . |
BITS usará un valor predeterminado de "2" para el valor del Registro UseLMCompat si el valor del Registro no existe.
Uso de certificados para la autenticación de cliente o servidor
En la comunicación segura de cliente/servidor, los clientes y servidores pueden usar certificados digitales para autenticarse mutuamente entre sí. BITS admite automáticamente la autenticación de servidor basada en certificados para transportes HTTP seguros. Para proporcionar BITS, el certificado de cliente necesario para la autenticación mutua, llame al método IBackgroundCopyJobHttpOptions::SetClientCertificateByID o IBackgroundCopyJobHttpOptions::SetClientCertificateByName .
Cuando un sitio web acepta pero no requiere un certificado de cliente SSL y el trabajo de BITS no especifica un certificado de cliente, se producirá un error en el trabajo con ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED (0x80072f0c).
Cómo controlar escenarios de proxy autenticados que requieren una configuración específica del usuario
Si usa BITS en un entorno que requiere autenticación de proxy mientras se ejecuta como una cuenta sin credenciales NTLM o Kerberos utilizables en el dominio de red de la máquina, debe realizar pasos adicionales para autenticarse correctamente mediante las credenciales de otra cuenta de usuario que tenga credenciales en el dominio. Este es un escenario típico cuando el código BITS se ejecuta como un servicio del sistema, como LocalService, NetworkService o LocalSystem, ya que esas cuentas no tienen credenciales NTLM o Kerberos utilizables.
La lógica de detección de proxy usada en BITS hace lo siguiente cuando se establece un token del asistente de red (BG_TOKEN_NETWORK):
- Si se llamó a IBackgroundCopyJob::SetProxySettings con BG_JOB_PROXY_USAGE_PRECONFIG, lea la configuración del proxy IE local mediante la suplantación de contexto de token del propietario del trabajo a través de WinHttpGetIEProxyConfigForCurrentUser. A partir de Windows 10, versión 1809 (10.0; Compilación 17763), la identidad del token auxiliar se usa para este paso.
- Si se llamó a IBackgroundCopyJob::SetProxySettings con BG_PROXY_USAGE_AUTODETECT o si la configuración de IE del BG_JOB_PROXY_USAGE_PRECONFIG caso especifica la detección automática o una dirección URL de configuración automática, realiza la detección automática de proxy o el Protocolo de detección automática de proxy web (WPAD), mediante la suplantación de token auxiliar mediante WinHttpGetProxyForUrl.
Después de eso, la suplantación de token auxiliar se usa para la autenticación de servidor proxy o servidor en todo.
A partir de Windows 10, versión 1809 (10.0; Compilación 17763), se simplifica el escenario de proxy autenticado con credenciales específicas del usuario.
- Llame al método SetCredentials del trabajo de BITS con BG_AUTH_SCHEME_NEGOTIATE, UserName establecido en NULL, Password establecido en NULL y Target establecido en BG_AUTH_TARGET_PROXY. Esto hace que las credenciales implícitas de la cuenta de usuario se usen para la autenticación NTLM y Kerberos con el proxy y el servidor.
- Llame a IBackgroundCopyJob::SetProxySettings con BG_JOB_PROXY_USAGE_PRECONFIG.
- QueryInterface para IBitsTokenOptions.
- Suplantar la cuenta de usuario que usa para las credenciales NTLM/Kerberos.
- Llame a SetHelperToken.
- Llame a SetHelperTokenFlags con BG_TOKEN_NETWORK.
- Revierta la suplantación.
- Continúe con la configuración del trabajo.
- Llame a Resume en el trabajo.
Antes de Windows 10, versión 1809 (10.0; Compilación 17763), la identidad de usuario correcta (la identidad del token auxiliar) se usa para la detección de proxy basada en red (WPAD) y para la autenticación de proxy, pero la detección real de la configuración del proxy local (IE) siempre se realiza mediante el token del propietario del trabajo, incluso cuando se configura un token auxiliar. Para solucionar este problema, puede seguir estos pasos.
- Suplantar la cuenta de usuario que usa para las credenciales NTLM/Kerberos.
- Recupere la configuración del proxy de IE de la cuenta de usuario llamando a WinHttpGetIEProxyConfigForCurrentUser.
- Revierta la suplantación.
- Llame al método SetCredentials del trabajo de BITS con BG_AUTH_SCHEME_NEGOTIATE, UserName establecido en NULL, Password establecido en NULL y Target establecido en BG_AUTH_TARGET_PROXY. Esto hace que las credenciales implícitas de la cuenta de usuario se usen para la autenticación NTLM y Kerberos con el proxy y el servidor.
- Si el paso 2 produjo cualquier configuración de proxy específica del usuario (es decir, lpszProxy o lpszProxyBypass no son NULL), establezca la configuración de trabajo correspondiente manualmente, mediante SetProxySettings con la configuración de BG_JOB_PROXY_USAGE_OVERRIDE .
- Si el paso 2 no produjo ninguna configuración de proxy específica del usuario, llame a SetProxySettings con BG_JOB_USAGE_PRECONFIG.
- QueryInterface para IBitsTokenOptions.
- Vuelva a suplantar la cuenta de usuario.
- Llame a SetHelperToken.
- Llame a SetHelperTokenFlags con BG_TOKEN_NETWORK.
- Revierta la suplantación.
- Continúe con la configuración del trabajo.
- Llame a Resume en el trabajo.