SEC_WINNT_AUTH_IDENTITY_EX2结构(sspi.h)
包含有关身份验证标识的信息。 SEC_WINNT_AUTH_IDENTITY_EX2 结构包含提供给 AcquireCredentialsHandle 函数的身份验证数据。
语法
typedef struct _SEC_WINNT_AUTH_IDENTITY_EX2 {
unsigned long Version;
unsigned short cbHeaderLength;
unsigned long cbStructureLength;
unsigned long UserOffset;
unsigned short UserLength;
unsigned long DomainOffset;
unsigned short DomainLength;
unsigned long PackedCredentialsOffset;
unsigned short PackedCredentialsLength;
unsigned long Flags;
unsigned long PackageListOffset;
unsigned short PackageListLength;
} SEC_WINNT_AUTH_IDENTITY_EX2, *PSEC_WINNT_AUTH_IDENTITY_EX2;
成员
Version
结构的版本号。 这必须 SEC_WINNT_AUTH_IDENTITY_VERSION_2。
cbHeaderLength
结构标头的大小(以字节为单位)。
cbStructureLength
结构的大小(以字节为单位)。
UserOffset
结构开头到用户名字符串开头的偏移量。
UserLength
用户名字符串的大小(以字节为单位)。
DomainOffset
结构开头到域名字符串开头的偏移量。
标识凭据应包含标识提供者名称而不是域名。
DomainLength
域名字符串的大小(以字节为单位)。
PackedCredentialsOffset
从结构的开头到打包凭据的开头的偏移量。
打包凭据是一个 SEC_WINNT_AUTH_PACKED_CREDENTIALS 结构,其中包含唯一指定凭据类型的凭据类型。
PackedCredentialsLength
打包凭据字符串的大小(以字节为单位)。
Flags
未签名的长 标志,指示可协商 安全包所使用的类型。
价值 | 意义 |
---|---|
|
所有数据都在一个缓冲区中。 |
|
与 Kerberos安全支持提供程序(SSP)一起使用。 凭据仅用于标识。 Kerberos 包定向到票证中不包括授权数据。 |
|
凭据采用 ANSI 格式。 |
|
凭据采用 Unicode 格式。 |
|
当凭据类型为密码时,此标志的存在指定结构是联机 ID 凭据。
DomainOffset 和 DomainLength 成员对应于联机 ID 提供程序名称。
Windows Server 2008 R2 和 Windows 7:不支持 此标志。 |
|
该结构由 SspiEncryptAuthIdentity 函数或具有SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_PROCESS选项的 SspiEncryptAuthIdentityEx 函数加密。 它只能由同一进程解密。
Windows Server 2008 R2 和 Windows 7:不支持 此标志。 |
|
该结构由 SspiEncryptAuthIdentityEx 函数使用 SYSTEM 安全上下文下的 SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON 选项进行加密。 它只能由作为 SYSTEM 运行的线程解密。
Windows Server 2008 R2 和 Windows 7:不支持 此标志。 |
|
该结构由 SspiEncryptAuthIdentityEx 函数加密,该函数在非系统安全上下文下使用SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON选项。 它只能由在同一登录会话中运行的线程解密,该会话在该会话中进行加密。
Windows Server 2008 R2 和 Windows 7:不支持 此标志。 |
|
身份验证标识缓冲区 cbStructureLength + 8 个填充字节,这些字节是就地加密或解密标识所必需的。 |
PackageListOffset
从结构的开头到受支持包列表的开头的偏移量。
PackageListLength
支持的包列表的大小(以字节为单位)。
言论
可以从多个凭据 API 返回此身份验证标识缓冲区,例如,GetSerialization 方法和 CredUIPromptForWindowsCredential 和 SspiPromptForCredentials 函数。
该结构描述身份验证标识缓冲区的标头,并将数据追加到结构末尾。 尽管缓冲区大小是由 cbStructureLength 成员指定的,但实际缓冲区大小可以大于或小于 cbStructureLength。 某些函数(如 SspiValidateAuthIdentity)将指针(而不是缓冲区大小)作为输入获取标识结构。 因此,这些函数可以验证内部缓冲区数据,但无法验证缓冲区大小。 这可能会导致在缓冲区范围之外读取或写入数据。 为了避免在处理不受信任的标识缓冲区时出现缓冲区溢出,应用程序应调用 SspiUnmarshalAuthIdentity 以获取指向具有验证大小的标识结构的指针,然后将该指针传递给函数。
SEC_WINNT_AUTH_IDENTITY_EX2 结构可由 QueryContextAttributes(CredSSP) 返回,并由 AcquireCredentialsHandle(CredSSP)、LsaLogonUser和其他标识提供者接口使用。
SEC_WINNT_AUTH_PACKED_CREDENTIALS 可以包含密码凭据类型,定义为SEC_WINNT_AUTH_DATA_TYPE_PASSWORD。 此凭据类型描述域用户和其他联机标识的密码凭据。 应用程序必须定义_SEC_WINNT_AUTH_TYPES来编译引用此凭据类型的代码以及 SEC_WINNT_AUTH_PACKED_CREDENTIALS 结构的其他定义。
应用程序不应直接查询或设置 标志 成员。 使用 SspiIsAuthIdentityEncrypted、SspiEncryptAuthIdentityEx和 SspiDecryptAuthIdentityEx 函数来管理 SEC_WINNT_AUTH_IDENTITY_EX2 结构的加密和解密。
标识提供者必须显式检查或设置SEC_WINNT_AUTH_IDENTITY_FLAGS_ID_PROVIDER和域名字段,以区分其密码凭据与域密码和其他标识提供者的密码。
可以使用 CRED_PACK_ID_PROVIDER_CREDENTIALS 选项调用 CredPackAuthenticationBuffer 函数,以创建具有SEC_WINNT_AUTH_DATA_TYPE_PASSWORD凭据类型的身份验证数据的 SEC_WINNT_AUTH_IDENTITY_EX2 结构,这是包含SEC_WINNT_AUTH_IDENTITY_FLAGS_ID_PROVIDER值的 标志 成员, 和 DomainOffset 成员设置为提供程序名称。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 7 [仅限桌面应用] |
支持的最低服务器 | Windows Server 2008 R2 [仅限桌面应用] |
标头 | sspi.h |