Autenticação (BITS)
O BITS oferece suporte à autenticação básica, autenticação do Passport e vários esquemas de autenticação de desafio/resposta. Se o servidor ou proxy exigir autenticação do usuário, use a função IBackgroundCopyJob2::SetCredentials para especificar as credenciais do usuário. O BITS usa a CryptoAPI para proteger as credenciais.
Para definir credenciais para autenticação Básica, use a função SetCredentials para especificar o nome de usuário e a senha. Você só deve usar a autenticação Básica com sites seguros https:// protegidos; caso contrário, o nome de usuário e a senha ficarão visíveis para os usuários.
É possível incorporar o nome de usuário e a senha na URL. Isso não é considerado uma boa prática de segurança e foi preterido na RFC 3986 (seção 3.2.1).
Para autenticação do Passport , o BITS oferece suporte apenas a credenciais explícitas, não a credenciais implícitas vinculadas à conta.
Para autenticação de desafio/resposta, o BITS representa o usuário e usa o Snego para determinar qual autenticação de desafio/resposta usar, como NTLM ou o protocolo Kerberos. Para obter uma lista de esquemas de desafio/resposta suportados pelo BITS, consulte BG_AUTH_SCHEME.
Os trabalhos do BITS podem falhar se o diretório virtual no servidor tiver autenticação anônima e outro esquema de autenticação habilitado e se as ACLs protegerem o diretório virtual ou os arquivos de download. Por exemplo, um trabalho falhará com "acesso negado" se o diretório virtual tiver autenticação anônima e integrada habilitada e o arquivo contiver uma ACL que permita que apenas Ben leia o arquivo. Isso ocorre porque o diretório virtual permite acesso anônimo, portanto, o IIS não autentica Ben explicitamente (as credenciais de Ben não são usadas para acessar o arquivo e o acesso é negado).
Usando credenciais implícitas
Para usar as credenciais implícitas (logon) do usuário para autenticação NTLM ou Kerberos, chame o método IBackgroundCopyJob2::SetCredentials e defina os membros UserName e Password da estrutura BG_BASIC_CREDENTIALS como NULL. Se você especificar credenciais implícitas para um proxy, o BITS também usará as credenciais implícitas para autenticação de servidor, a menos que você especifique credenciais explícitas de servidor.
Para obter informações adicionais sobre serviços, consulte Contas de serviço e BITS.
Você também pode alterar o valor do Registro LMCompatibilityLevel ou UseLMCompat, no entanto, você deve alterar esses valores somente se tiver um aplicativo existente que não possa ser alterado para chamar o método SetCredentials.
O BITS usará credenciais implícitas para autenticação se o valor do Registro LMCompatibilityLevel for dois ou maior e você não tiver chamado o método SetCredentials. O caminho completo para o valor do Registro LMCompatibilityLevel é HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\LmCompatibilityLevel.
Observe que a alteração do valor do Registro LMCompatibilityLevel pode afetar outros aplicativos e serviços em execução no computador.
Se a configuração do valor do Registro LMCompatibilityLevel for um problema, você poderá criar o valor do Registro UseLMCompat em HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\BITS. O valor do Registro é um DWORD. A tabela a seguir lista os valores possíveis para UseLMCompat:
Valor | Descrição |
---|---|
0 | O BITS enviará credenciais implícitas sempre que o servidor solicitar credenciais NTLM ou Kerberos. |
1 | O BITS enviará credenciais implícitas somente se o valor do Registro LMCompatibilityLevel do computador cliente for maior ou igual a 2. |
2 | O BITS enviará credenciais implícitas somente se o aplicativo chamar o método SetCredentials. |
O BITS usará um valor padrão de "2" para o valor do Registro UseLMCompat se o valor do Registro não existir.
Usando certificados para autenticação cliente/servidor
Na comunicação segura cliente/servidor, clientes e servidores podem usar certificados digitais para autenticar mutuamente uns aos outros. O BITS oferece suporte automático à autenticação de servidor baseada em certificado para transportes HTTP seguros. Para fornecer ao BITS o certificado de cliente necessário para autenticação mútua, chame o método IBackgroundCopyJobHttpOptions::SetClientCertificateByID ou IBackgroundCopyJobHttpOptions::SetClientCertificateByName.
Quando um site aceita, mas não requer um certificado de cliente SSL, e o trabalho do BITS não especifica um certificado de cliente, o trabalho falhará com ERROR_WINHTTP_CLIENT_AUTH_CERT_NEEDED (0x80072f0c).
Como lidar com cenários de proxy autenticado que exigem configurações específicas do usuário
Se você estiver usando o BITS em um ambiente que exija autenticação de proxy durante a execução como uma conta sem credenciais NTLM ou Kerberos utilizáveis no domínio de rede da máquina, deverá executar etapas extras para autenticar corretamente usando as credenciais de outra conta de usuário que tenha credenciais no domínio. Esse é um cenário típico quando o código BITS está sendo executado como um serviço do sistema, como LocalService, NetworkService ou LocalSystem, pois essas contas não têm credenciais NTLM ou Kerberos utilizáveis.
A lógica de detecção de proxy usada no BITS faz o seguinte quando um token auxiliar de rede (BG_TOKEN_NETWORK) é definido:
- Se IBackgroundCopyJob::SetProxySettings foi chamado com BG_JOB_PROXY_USAGE_PRECONFIG, leia as configurações de proxy do IE local usando a representação de contexto de token de proprietário do trabalho via WinHttpGetIEProxyConfigForCurrentUser. A partir do Windows 10, versão 1809 (10.0; Build 17763), a identidade do token auxiliar é usada para esta etapa.
- Se IBackgroundCopyJob::SetProxySettings foi chamado com BG_PROXY_USAGE_AUTODETECT ou se as configurações do IE do caso BG_JOB_PROXY_USAGE_PRECONFIG especificam detecção automática ou uma URL de configuração automática, então conduza a detecção de proxy automático ou o protocolo WPAD (Web Proxy Autodiscovery Protocol), usando a representação de token auxiliar via WinHttpGetProxyForUrl.
Depois disso, a representação de token auxiliar é usada para autenticação de proxy ou servidor por toda parte.
A partir do Windows 10, versão 1809 (10.0; Build 17763), o cenário de proxy autenticado com credenciais específicas do usuário é simplificado.
- Chame o método SetCredentials do trabalho do BITS com BG_AUTH_SCHEME_NEGOTIATE, UserName definido como NULL, Password definido como NULL e Target definido como BG_AUTH_TARGET_PROXY. Isso faz com que as credenciais implícitas da conta de usuário sejam usadas para autenticação NTLM e Kerberos com o proxy e o servidor.
- Chame IBackgroundCopyJob::SetProxySettings com BG_JOB_PROXY_USAGE_PRECONFIG.
- QueryInterface para IBitsTokenOptions.
- Represente a conta de usuário que você está usando para credenciais NTLM/Kerberos.
- Chame SetHelperToken.
- Chame SetHelperTokenFlags com BG_TOKEN_NETWORK.
- Reverter representação.
- Continue a configuração do trabalho.
- Chame o Currículo no trabalho.
Antes do Windows 10, a versão 1809 (10.0; Build 17763), a identidade de usuário correta (a identidade do token auxiliar) é usada para detecção de proxy baseado em rede (WPAD) e para autenticação de proxy, mas a detecção real de configurações de proxy local (IE) é sempre feita usando o token do proprietário do trabalho, mesmo quando um token auxiliar é configurado. Para contornar essa falha, você pode seguir estas etapas.
- Represente a conta de usuário que você está usando para credenciais NTLM/Kerberos.
- Recupere as configurações de proxy do IE da conta de usuário chamando WinHttpGetIEProxyConfigForCurrentUser.
- Reverter representação.
- Chame o método SetCredentials do trabalho do BITS com BG_AUTH_SCHEME_NEGOTIATE, UserName definido como NULL, Password definido como NULL e Target definido como BG_AUTH_TARGET_PROXY. Isso faz com que as credenciais implícitas da conta de usuário sejam usadas para autenticação NTLM e Kerberos com o proxy e o servidor.
- Se a etapa 2 gerou configurações de proxy específicas do usuário (ou seja, lpszProxy ou lpszProxyBypass não são NULL), defina as configurações de trabalho correspondentes manualmente, usando SetProxySettings com a configuração BG_JOB_PROXY_USAGE_OVERRIDE.
- Se a etapa 2 não produziu nenhuma configuração de proxy específica do usuário, chame SetProxySettings com BG_JOB_USAGE_PRECONFIG.
- QueryInterface para IBitsTokenOptions.
- Represente a conta de usuário novamente.
- Chame SetHelperToken.
- Chame SetHelperTokenFlags com BG_TOKEN_NETWORK.
- Reverter representação.
- Continue a configuração do trabalho.
- Chame o Currículo no trabalho.