Freigeben über


Abrufen alternativer Digestanmeldeinformationen

Füllen Sie eine SEC_WINNT_AUTH_IDENTITY Struktur mit Informationen für den alternativen Sicherheitsprinzipal auf, um andere Anmeldeinformationen als die Anmeldeinformationen abzurufen, die der aktuellen Anmeldesitzung zugeordnet sind. Übergeben Sie die Struktur mithilfe des pAuthData-Parameters an die AcquireCredentialsHandle-Funktion.

In der folgenden Tabelle werden die Elemente der SEC_WINNT_AUTH_IDENTITY-Struktur beschrieben.

Member BESCHREIBUNG
Benutzer Null-beendete Zeichenfolge, die den Namen des Sicherheitsprinzipals enthält, dessen Anmeldeinformationen zum Einrichten eines Sicherheitskontexts verwendet werden.
UserLength Die Länge des Mitglieds "Benutzer " in Zeichen. Lassen Sie den beendenden NULL-Wert weg.
Domäne Null-beendete Zeichenfolge, die die Domäne identifiziert, die das Konto des Sicherheitsprinzipals enthält.
DomainLength Die Länge des Domänenelements in Zeichen. Lassen Sie den beendenden NULL-Wert weg.
Kennwort Null-beendete Zeichenfolge, die das Kennwort des Sicherheitsprinzipals enthält.
PasswordLength Die Länge des Kennwortelements in Zeichen. Lassen Sie den beendenden NULL-Wert weg.
Flags Gibt an, ob die Zeichenfolgenmember im ANSI - oder Unicode-Format vorliegen.

 

In der folgenden Tabelle sind die gültigen Werte für das Flags-Element der Struktur aufgeführt.

Konstante Beschreibung
SEC_WINNT_AUTH_IDENTITY_ANSI Zeichenfolgen in dieser Struktur haben das ANSI-Format.
SEC_WINNT_AUTH_IDENTITY_UNICODE Zeichenfolgen in dieser Struktur sind im Unicode-Format .

 

Die Struktur und konstanten werden in der Headerdatei Rpcdce.h deklariert, die mit dem Platform Software Development Kit (SDK) verteilt wird.

Das folgende Beispiel veranschaulicht einen clientseitigen Aufruf zum Abrufen von Digest-Anmeldeinformationen für ein bestimmtes Benutzerkonto.

#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.
    );
}

Die _tcslen-Funktion gibt die Zeichenfolgenlänge in Zeichen zurück, ohne das endende NULL-Zeichen.

Wenn Ihre Anwendung die bei der Anmeldung eingerichteten Anmeldeinformationen verwenden kann, finden Sie weitere Informationen unter Abrufen von Standard-Digestanmeldeinformationen.