获取备用摘要凭据
若要获取与当前登录会话关联的凭据以外的凭据,请使用备用安全主体的信息填充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 字符。
如果应用程序可以使用登录时建立的凭据,请参阅 获取默认摘要凭据。