Compartir a través de


Método IBackgroundCopyJob2::SetCredentials (bits1_5.h)

Especifica las credenciales que se usarán para una solicitud de autenticación de usuario de servidor remoto o proxy.

Sintaxis

HRESULT SetCredentials(
  [in] BG_AUTH_CREDENTIALS *credentials
);

Parámetros

[in] credentials

Identifica el destino (proxy o servidor), el esquema de autenticación y las credenciales del usuario que se van a usar para la autenticación de usuario. Para obtener más información, consulte la estructura BG_AUTH_CREDENTIALS .

Valor devuelto

Este método devuelve los siguientes valores devueltos, así como otros.

Código devuelto Descripción
S_OK
Correcto
BG_E_INVALID_AUTH_TARGET
Valor de enumeración de destino no reconocido.
BG_E_INVALID_AUTH_SCHEME
Valor de enumeración de esquema no reconocido.
BG_E_USERNAME_TOO_LARGE
El nombre de usuario es demasiado largo. Para obtener el límite, consulte la estructura BG_BASIC_CREDENTIALS .
BG_E_PASSWORD_TOO_LARGE
La contraseña es demasiado larga. Para obtener el límite, consulte la estructura BG_BASIC_CREDENTIALS .
E_INVALIDARG
Los miembros UserName y Password de la estructura BG_BASIC_CREDENTIALS no pueden ser NULL si se especifica el esquema Basic o Digest.

Comentarios

BITS proporciona las credenciales a un servidor proxy o servidor en respuesta a una solicitud de autenticación de usuario. Establezca las credenciales antes de la llamada inicial a Resume.

Debe llamar a este método para cada par de esquema y destino que desee proporcionar. Por ejemplo, si desea especificar credenciales de proxy para la autenticación básica y implícita, llamaría a este método una vez para especificar las credenciales básicas y una segunda vez para especificar las credenciales implícitas.

Si el trabajo contiene actualmente credenciales con el mismo par de esquema y destino, las credenciales existentes se reemplazan por las nuevas credenciales. Las credenciales se conservan durante la vida del trabajo. Para quitar las credenciales del trabajo, llame al método IBackgroundCopyJob2::RemoveCredentials .

Si conoce los esquemas que solicitará el proxy o el servidor, solo puede proporcionar esas credenciales. De lo contrario, proporcione credenciales para todos los esquemas.

El trabajo entra en el estado de BG_JOB_STATE_ERROR si no proporciona las credenciales solicitadas por el proxy o el servidor, o el proxy o el servidor no pueden autenticar las credenciales. Compruebe el código de error para determinar si se produjo un error de autenticación en el servidor (BG_E_HTTP_ERROR_401) o proxy (BG_E_HTTP_ERROR_407). Para recuperar el código de error, llame al método IBackgroundCopyJob::GetError para recuperar un puntero de interfaz IBackgroundCopyError . A continuación, llame al método IBackgroundCopyError::GetError para recuperar el código de error. Después de determinar dónde se produjo el error de autenticación (proxy o servidor), especifique las nuevas credenciales que se usarán para el proxy o el servidor y llame al método IBackgroundCopyJob::Resume para reanudar el trabajo. Dado que no se puede determinar qué esquema no se pudo realizar, especifique las credenciales de todos los esquemas antes de llamar al método Resume .

No hay ningún método para recuperar las credenciales que ha establecido.

Debe llamar a este método en el contexto del propietario del trabajo.

Al llamar al método IBackgroundCopyJob::TakeOwnership , se quitan las credenciales del trabajo.

Para especificar credenciales implícitas (las credenciales del usuario que ha iniciado sesión), establezca el esquema en NTLM y el nombre de usuario y la contraseña 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.

Nota BITS omite las credenciales de los nombres remotos que especifican una ruta de acceso SMB.
 
Nota BITS no autentica el servidor ni cifra el canal. Use HTTPS si se trata de un problema para la aplicación.
 

Ejemplos

En el ejemplo siguiente se muestra cómo llamar al método SetCredentials para especificar credenciales básicas para una solicitud de autenticación de usuario de servidor. En el ejemplo se usa la función CredUIPromptForCredentials para capturar el nombre de usuario y la contraseña. En el ejemplo se supone que hay un puntero de interfaz IBackgroundCopyJob válido, pJob. En el ejemplo se usa la función SecureZeroMemory para borrar las ubicaciones de memoria asociadas a la información confidencial. La función SecureZeroMemory se define en WinBase.h.

#define MAX_STR_LENGTH 300+1    // BITS limit for user name and password

CREDUI_INFO cuiinfo;
WCHAR szUserName[MAX_STR_LENGTH];  
WCHAR szPassword[MAX_STR_LENGTH];
DWORD rc;
IBackgroundCopyJob* pJob;
IBackgroundCopyJob2* pJob2 = NULL;
BG_AUTH_CREDENTIALS ac;

cuiinfo.cbSize = sizeof(CREDUI_INFO);
cuiinfo.hbmBanner = NULL;
cuiinfo.hwndParent = NULL; //Desktop is parent
cuiinfo.pszCaptionText = L"Server Authentication";
cuiinfo.pszMessageText = L"Enter user credentials for Basic authentication.";

//Initialize the UserName and Password fields. This example sets  
//UserName to blank, but you could also set UserName to the owner 
//of the job or the current user. For an example that retrieves the owner's
//name, see the example code for the IBackgroundCopyJob::GetOwner method. 
szUserName[0] = L'\0';
szPassword[0] = L'\0';
rc = CredUIPromptForCredentials(&cuiinfo, NULL, NULL, 0,
    szUserName, MAX_STR_LENGTH,
    szPassword, MAX_STR_LENGTH, 
    NULL, CREDUI_FLAGS_DO_NOT_PERSIST | CREDUI_FLAGS_GENERIC_CREDENTIALS);

if (NO_ERROR == rc)
{
    pJob->QueryInterface(__uuidof(IBackgroundCopyJob2), (void**)&pJob2);
    ac.Target = BG_AUTH_TARGET_SERVER;
    ac.Scheme = BG_AUTH_SCHEME_BASIC;
    ac.Credentials.Basic.UserName = szUserName;
    ac.Credentials.Basic.Password = szPassword;
    hr = pJob2->SetCredentials(&ac);
    if (FAILED(hr))
    {
      //Handle error
    }
    SecureZeroMemory(szUserName, sizeof(szUserName));
    SecureZeroMemory(szPassword, sizeof(szPassword));
}

Requisitos

   
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2003
Plataforma de destino Windows
Encabezado bits1_5.h (incluir Bits.h)
Library Bits.lib
Archivo DLL BitsPrx2.dll
Redistribuible BITS 1.5 en Windows XP

Consulte también

Autenticación

BG_AUTH_CREDENTIALS

IBackgroundCopyJob2::RemoveCredentials