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 函数或具有SEC_WINNT_AUTH_IDENTITY_ENCRYPT_SAME_PROCESS选项的 SspiEncryptAuthIdentityEx 函数加密。 它只能由同一进程解密。

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 函数加密,该函数在非系统安全上下文下使用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 结构的其他定义。

应用程序不应直接查询或设置 标志 成员。 使用 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_EX2 结构,这是包含SEC_WINNT_AUTH_IDENTITY_FLAGS_ID_PROVIDER值的 标志 成员, 和 DomainOffset 成员设置为提供程序名称。

要求

要求 价值
最低支持的客户端 Windows 7 [仅限桌面应用]
支持的最低服务器 Windows Server 2008 R2 [仅限桌面应用]
标头 sspi.h