获取备用摘要凭据

若要获取与当前登录会话关联的凭据以外的凭据,请使用备用安全主体的信息填充SEC_WINNT_AUTH_IDENTITY结构。 使用 pAuthData 参数将结构传递给 AcquireCredentialsHandle 函数。

下表描述了 SEC_WINNT_AUTH_IDENTITY 结构的成员。

成员 说明
用户 以 Null 结尾的字符串,包含将用于建立安全上下文的安全主体的名称。
UserLength User 成员的长度(以字符为单位)。 省略终止 null。
Domain 以 Null 结尾的字符串,用于标识包含安全主体帐户的域。
DomainLength 成员的长度(以字符为单位)。 省略终止 null。
密码 包含安全主体密码的以 Null 结尾的字符串。
PasswordLength 密码成员的长度(以字符为单位)。 省略终止 null。
标志 指示字符串成员是 ANSI 格式还是 Unicode 格式。

 

下表列出了 结构的 Flags 成员的有效值。

返回的常量 说明
SEC_WINNT_AUTH_IDENTITY_ANSI 此结构中的字符串采用 ANSI 格式。
SEC_WINNT_AUTH_IDENTITY_UNICODE 此结构中的字符串采用 Unicode 格式。

 

结构和常量在随平台软件开发工具包 (SDK) 分发的 Rpcdce.h 头文件中声明。

以下示例演示了一个客户端调用来获取特定用户帐户的摘要凭据。

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

_tcslen 函数返回字符串长度(以字符为单位),不包括终止 null 字符。

如果应用程序可以使用登录时建立的凭据,请参阅 获取默认摘要凭据