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.