Partilhar via


Autenticação (BITS)

O BITS suporta 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çãoIBackgroundCopyJob2::SetCredentials para especificar as credenciais do usuário. O BITS usa o CryptoAPI para proteger as credenciais.

Para definir credenciais para autenticação Básica, use a funçãoSetCredentials para especificar o nome de usuário e a senha. Você só deve usar a autenticação Básica com https:// sites seguros protegidos; caso contrário, o nome de utilizador e a palavra-passe serão visíveis para os utilizadores.

É possível incorporar o nome de utilizador e a palavra-passe no URL. Isso não é considerado uma boa prática de segurança e foi preterido no RFC 3986 (seção 3.2.1).

Para autenticação Passport, o BITS suporta apenas credenciais explícitas, não credenciais implícitas vinculadas à conta.

Para autenticação de desafio/resposta, o BITS representa o usuário e usa 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 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 baixarem arquivos. 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 explicitamente Ben (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étodoIBackgroundCopyJob2::SetCredentials e defina o UserName e Password membros 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 do servidor, a menos que você especifique credenciais explícitas do servidor.

Para obter informações adicionais sobre serviços, consulte Contas de serviço eBITS .

Você também pode alterar o LMCompatibilityLevel ou UseLMCompat valor do Registro; no entanto, você deve alterar esses valores somente se você tiver um aplicativo existente que não pode ser alterado para chamar o SetCredentials método.

O BITS usará credenciais implícitas para autenticação se o valor do Registro LMCompatibilityLevel for dois ou superior e você não tiver chamado o SetCredentials método. O caminho completo para o valor do Registro LMCompatibilityLevel é HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA\LmCompatibilityLevel.

Observe que alterar o LMCompatibilityLevel valor do Registro pode afetar outros aplicativos e serviços em execução no computador.

Se a definição do valor do Registro LMCompatibilityLevel for um problema, você poderá criar o UseLMCompat valor do Registro 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 chamado o métodoSetCredentials.

O BITS usará um valor padrão de "2" para o UseLMCompat valor do Registro se o valor do Registro não existir.

Usando certificados para autenticação cliente/servidor

Na comunicação cliente/servidor segura, clientes e servidores podem usar certificados digitais para autenticar mutuamente. O BITS suporta automaticamente a 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 odeIBackgroundCopyJobHttpOptions::SetClientCertificateByID ou método IBackgroundCopyJobHttpOptions::SetClientCertificateByName.

Quando um site aceita, mas não requer um certificado de cliente SSL, e o trabalho 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 requer 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 adicionais para autenticar corretamente usando as credenciais de outra conta de usuário que tenha credenciais no domínio. Este é 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 deteçã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 do proprietário do trabalho por meio 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 especificarem a deteção automática ou uma URL de configuração automática, conduza a deteção de proxy automático ou o protocolo de descoberta automática de proxy da Web (WPAD), usando a representação de token auxiliar por meio de WinHttpGetProxyForUrl.

Depois disso, a representação do 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.

  1. Chame o método SetCredentials do trabalho BITS com BG_AUTH_SCHEME_NEGOTIATE, UserName definido como NULL , Password definido como NULLe 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.
  2. Ligue IBackgroundCopyJob::SetProxySettings com BG_JOB_PROXY_USAGE_PRECONFIG.
  3. QueryInterface para IBitsTokenOptions.
  4. Represente a conta de usuário que você está usando para credenciais NTLM/Kerberos.
  5. Ligue SetHelperToken.
  6. Chame SetHelperTokenFlags com BG_TOKEN_NETWORK.
  7. Reverter a falsificação de identidade.
  8. Continue a configuração do trabalho.
  9. Ligue Currículo no trabalho.

Antes do Windows 10, versão 1809 (10.0; Build 17763), a identidade de usuário correta (a identidade do token auxiliar) é usada para deteção de proxy baseada em rede (WPAD) e para autenticação de proxy, mas a deteçã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.

  1. Represente a conta de usuário que você está usando para credenciais NTLM/Kerberos.
  2. Recupere as configurações de proxy do IE da conta de usuário chamando WinHttpGetIEProxyConfigForCurrentUser.
  3. Reverter a falsificação de identidade.
  4. Chame o método SetCredentials do trabalho BITS com BG_AUTH_SCHEME_NEGOTIATE, UserName definido como NULL , Password definido como NULLe 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.
  5. Se a etapa 2 produziu quaisquer 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.
  6. Se a etapa 2 não produzir nenhuma configuração de proxy específica do usuário, chame SetProxySettings com BG_JOB_USAGE_PRECONFIG.
  7. QueryInterface para IBitsTokenOptions.
  8. Represente a conta de usuário novamente.
  9. Ligue SetHelperToken.
  10. Chame SetHelperTokenFlags com BG_TOKEN_NETWORK.
  11. Reverter a falsificação de identidade.
  12. Continue a configuração do trabalho.
  13. Ligue Currículo no trabalho.