Compartilhar via


Obtendo credenciais de resumo alternativo

Para obter credenciais diferentes daquelas associadas à sessão de logon atual, preencha uma estrutura SEC_WINNT_AUTH_IDENTITY com informações para a entidade de segurança alternativa. Passe a estrutura para a função AcquireCredentialsHandle usando o parâmetro pAuthData .

A tabela a seguir descreve os membros da estrutura SEC_WINNT_AUTH_IDENTITY .

Membro Descrição
Usuário Cadeia de caracteres terminada em nulo que contém o nome da entidade de segurança cujas credenciais serão usadas para estabelecer um contexto de segurança.
UserLength O comprimento do membro Usuário , em caracteres. Omita o nulo de terminação.
Domínio Cadeia de caracteres terminada em nulo que identifica o domínio que contém a conta da entidade de segurança.
DomainLength O comprimento do membro Domain , em caracteres. Omita o nulo de terminação.
Senha Cadeia de caracteres terminada em nulo que contém a senha da entidade de segurança.
PasswordLength O comprimento do membro Password , em caracteres. Omita o nulo de terminação.
Sinalizadores Indica se os membros da cadeia de caracteres estão no formato ANSI ou Unicode .

 

A tabela a seguir lista os valores válidos para o membro Flags da estrutura.

Constante Descrição
SEC_WINNT_AUTH_IDENTITY_ANSI As cadeias de caracteres nessa estrutura estão no formato ANSI.
SEC_WINNT_AUTH_IDENTITY_UNICODE As cadeias de caracteres nessa estrutura estão no formato Unicode .

 

A estrutura e as constantes são declaradas no arquivo de cabeçalho Rpcdce.h distribuído com o SDK (Platform Software Development Kit).

O exemplo a seguir demonstra uma chamada do lado do cliente para obter credenciais digest para uma conta de usuário 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.
    );
}

A função _tcslen retorna o comprimento da cadeia de caracteres em caracteres, não incluindo o caractere nulo de terminação.

Se o aplicativo puder usar as credenciais estabelecidas no logon, consulte Obtendo credenciais de resumo padrão.