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 格式。 |
|
當認證類型為密碼時,此旗標的存在會指定結構為在線標識碼認證。 DomainOffset 和 DomainLength 成員會對應至在線標識碼提供者名稱。
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 函式所加密,且具有非 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_EX2 結構、包含SEC_WINNT_AUTH_IDENTITY_FLAGS_ID_PROVIDER值的 Flags 成員,以及設定為提供者名稱的 DomainOffset 成員。
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows 7 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2008 R2 [僅限傳統型應用程式] |
標頭 | sspi.h |
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應