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

一个无符号长标志,指示可协商安全包使用的类型。

含义
SEC_WINNT_AUTH_IDENTITY_MARSHALLED
4 (0x4)
所有数据都在一个缓冲区中。
SEC_WINNT_AUTH_IDENTITY_ONLY
8 (0x8)
Kerberos安全支持提供程序 一起使用 (SSP) 。 凭据仅用于标识。 Kerberos 包定向到票证中不包含授权数据。
SEC_WINNT_AUTH_IDENTITY_ANSI
1 (0x1)
凭据采用 ANSI 格式。
SEC_WINNT_AUTH_IDENTITY_UNICODE
2 (0x2)
凭据采用 Unicode 格式。
SEC_WINNT_AUTH_IDENTITY_FLAGS_ID_PROVIDER
524288 (0x80000)
当凭据类型为密码时,此标志的存在将指定结构是联机 ID 凭据。 DomainOffsetDomainLength 成员对应于联机 ID 提供程序名称。

Windows Server 2008 R2 和 Windows 7: 不支持此标志。

SEC_WINNT_AUTH_IDENTITY_FLAGS_PROCESS_ENCRYPTED
16 (0x10)
结构由 SspiEncryptAuthIdentity 函数或 SspiEncryptAuthIdentityEx 函数使用 SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_PROCESS 选项进行加密。 它只能由同一进程解密。

Windows Server 2008 R2 和 Windows 7: 不支持此标志。

SEC_WINNT_AUTH_IDENTITY_FLAGS_SYSTEM_PROTECTED
32 (0x20)
结构由 SspiEncryptAuthIdentityEx 函数使用 SYSTEM 安全上下文下的 SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON 选项进行加密。 它只能由作为 SYSTEM 运行的线程解密。

Windows Server 2008 R2 和 Windows 7: 不支持此标志。

SEC_WINNT_AUTH_IDENTITY_FLAGS_USER_PROTECTED
64 (0x40)
结构由 SspiEncryptAuthIdentityEx 函数在非 SYSTEM 安全上下文下使用 SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_LOGON 选项进行加密。 它只能由在其中加密的同一登录会话中运行的线程解密。

Windows Server 2008 R2 和 Windows 7: 不支持此标志。

SEC_WINNT_AUTH_IDENTITY_FLAGS_RESERVED
65536 (0x10000)
身份验证标识缓冲区是 cbStructureLength + 8 个填充字节,这些字节是就地加密或解密标识所必需的。

PackageListOffset

从结构开头到受支持包列表开头的偏移量。

PackageListLength

受支持的包列表的大小(以字节为单位)。

注解

可以从多个凭据 API 返回此身份验证标识缓冲区,例如 GetSerialization 方法和 CredUIPromptForWindowsCredentialSspiPromptForCredentials 函数。

结构描述身份验证标识缓冲区的标头,数据追加到结构的末尾。 尽管缓冲区大小是由 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 成员。 使用 SspiIsAuthIdentityEncryptedSspiEncryptAuthIdentityExSspiDecryptAuthIdentityEx 函数来管理 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