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 函数或 SspiEncryptAuthIdentityEx 函数使用 SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_PROCESS 选项进行加密。 它只能由同一进程解密。
Windows Server 2008 R2 和 Windows 7: 不支持此标志。 |
|
结构由 SspiEncryptAuthIdentityEx 函数使用 SYSTEM 安全上下文下的 SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON 选项进行加密。 它只能由作为 SYSTEM 运行的线程解密。
Windows Server 2008 R2 和 Windows 7: 不支持此标志。 |
|
结构由 SspiEncryptAuthIdentityEx 函数在非 SYSTEM 安全上下文下使用 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 结构的其他定义。
应用程序不应直接查询或设置 Flags 成员。 使用 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_FLAGS_ID_PROVIDER值的 Flags 成员以及设置为提供程序名称的 DomainOffset 成员创建SEC_WINNT_AUTH_IDENTITY_EX2结构。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
标头 | sspi.h |
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈