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)
當認證類型為密碼時,此旗標的存在會指定結構為在線標識碼認證。 DomainOffsetDomainLength 成員會對應至在線標識碼提供者名稱。

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 函式所加密,且具有非 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_EX2 結構、包含SEC_WINNT_AUTH_IDENTITY_FLAGS_ID_PROVIDER值的 Flags 成員,以及設定為提供者名稱的 DomainOffset 成員。

規格需求

需求
最低支援的用戶端 Windows 7 [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2008 R2 [僅限傳統型應用程式]
標頭 sspi.h