Compartir a través de


Obtención de credenciales de resumen alternativas

Para obtener credenciales distintas de las asociadas a la sesión de inicio de sesión actual, rellene una estructura de SEC_WINNT_AUTH_IDENTITY con información para la entidad de seguridad alternativa. Pase la estructura a la función AcquireCredentialsHandle mediante el parámetro pAuthData .

En la tabla siguiente se describen los miembros de la estructura SEC_WINNT_AUTH_IDENTITY .

Member Descripción
User Cadena terminada en NULL que contiene el nombre de la entidad de seguridad cuyas credenciales se usarán para establecer un contexto de seguridad.
UserLength Longitud del miembro User , en caracteres. Omita el valor null de terminación.
Dominio Cadena terminada en NULL que identifica el dominio que contiene la cuenta de la entidad de seguridad.
DomainLength Longitud del miembro Dominio , en caracteres. Omita el valor null de terminación.
Contraseña Cadena terminada en NULL que contiene la contraseña de la entidad de seguridad.
PasswordLength Longitud del miembro Password , en caracteres. Omita el valor null de terminación.
Marcas Indica si los miembros de cadena están en formato ANSI o Unicode .

 

En la tabla siguiente se enumeran los valores válidos para el miembro Flags de la estructura.

Constante Descripción
SEC_WINNT_AUTH_IDENTITY_ANSI Las cadenas de esta estructura están en formato ANSI.
SEC_WINNT_AUTH_IDENTITY_UNICODE Las cadenas de esta estructura están en formato Unicode .

 

La estructura y las constantes se declaran en el archivo de encabezado Rpcdce.h distribuido con el Kit de desarrollo de software (SDK) de plataforma.

En el ejemplo siguiente se muestra una llamada del lado cliente para obtener credenciales implícitas para una cuenta de usuario específica.

#include <windows.h>

#ifdef UNICODE
  ClientAuthID.Flags = SEC_WINNT_AUTH_IDENTITY_UNICODE;
#else
  ClientAuthID.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI;
#endif

void main()
{
    SECURITY_STATUS SecStatus; 
    TimeStamp tsLifetime; 
    CredHandle hCred;
    SEC_WINNT_AUTH_IDENTITY ClientAuthID;
    LPTSTR UserName = TEXT("ASecurityPrinciple");
    LPTSTR DomainName = TEXT("AnAuthenticatingDomain");

    // Initialize the memory.
    ZeroMemory( &ClientAuthID, sizeof(ClientAuthID) );

    // Specify string format for the ClientAuthID structure.


    // Specify an alternate user, domain and password.
      ClientAuthID.User = (unsigned char *) UserName;
      ClientAuthID.UserLength = _tcslen(UserName);

      ClientAuthID.Domain = (unsigned char *) DomainName;
      ClientAuthID.DomainLength = _tcslen(DomainName);

    // Password is an application-defined LPTSTR variable
    // containing the user password.
      ClientAuthID.Password = Password;
      ClientAuthID.PasswordLength = _tcslen(Password);

    // Get the client side credential handle.
    SecStatus = AcquireCredentialsHandle (
      NULL,                  // Default principal.
      WDIGEST_SP_NAME,       // The Digest SSP. 
      SECPKG_CRED_OUTBOUND,  // Client will use the credentials.
      NULL,                  // Do not specify LOGON id.
      &ClientAuthID,         // User information.
      NULL,                  // Not used with Digest SSP.
      NULL,                  // Not used with Digest SSP.
      &hCred,                // Receives the credential handle.
      &tsLifetime            // Receives the credential time limit.
    );
}

La función _tcslen devuelve la longitud de cadena en caracteres, sin incluir el carácter nulo de terminación.

Si la aplicación puede usar las credenciales establecidas en el inicio de sesión, consulte Obtención de credenciales de resumen predeterminadas.