Ottenere credenziali alternative per digest

Per ottenere credenziali diverse da quelle associate alla sessione di accesso corrente , popolare una struttura SEC_WINNT_AUTH_IDENTITY con informazioni relative all'entità di sicurezza alternativa . Passare la struttura alla funzione AcquireCredentialsHandle usando il parametro pAuthData.

Nella tabella seguente sono descritti i membri della struttura SEC_WINNT_AUTH_IDENTITY.

Membro Descrizione
utente Stringa con terminazione Null contenente il nome dell'entità di sicurezza le cui credenziali verranno usate per stabilire un contesto di sicurezza.
LunghezzaUtente La lunghezza, in caratteri, del membro utente . Omettere il valore Null di terminazione.
Dominio Stringa terminata da Null che identifica il dominio contenente l'account dell'entità di sicurezza.
LunghezzaDominio La lunghezza del membro del dominio , in caratteri. Omettere il null finale.
password Stringa con terminazione Null contenente la password dell'entità di sicurezza.
LunghezzaPassword Lunghezza del membro password, in caratteri. Omettere il terminante null.
bandiere Indica se i membri della stringa sono in formato ANSI o Unicode.

 

Nella tabella seguente sono elencati i valori validi per il Flags membro della struttura.

Costante Descrizione
SEC_WINNT_AUTH_IDENTITY_ANSI Le stringhe in questa struttura sono in formato ANSI.
SEC_WINNT_AUTH_IDENTITY_UNICODE Le stringhe in questa struttura sono in formato Unicode.

 

La struttura e le costanti vengono dichiarate nel file di intestazione Rpcdce.h distribuito con Platform Software Development Kit (SDK).

Nell'esempio seguente viene illustrata una chiamata lato client per ottenere le credenziali digest per un account utente specifico.

#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 funzione _tcslen restituisce la lunghezza della stringa in caratteri, senza includere il carattere Null di terminazione.

Se l'applicazione può usare le credenziali stabilite all'accesso, vedere Ottenimento delle credenziali Digest predefinite.