本主題提供 EAPHost Supplicant API 常見問題的解答。
為什麼我需要呼叫 「EapHostPeerInitialize」 和 「EapHostPeerUninitialize」?
EapHostPeerInitialize 和 EapHostPeerUninitialize 初始化和取消初始化用於處理序間通訊的 COM 環境 (IPC) supplicant 與 EAPHost 之間的通訊。
必須在已針對單一線程 Apartment (STA) 初始化 COM 的執行緒上叫用哪些函式?
EapHostPeerInvokeConfigUI、 EapHostPeerInvokeInteractiveUI和 EapHostAuthenticatorInvokeConfigUI 必須在已針對 STA 初始化 COM 的執行緒上呼叫。 呼叫 COM API CoInitialize即可達成此目的;當 supplicant 已完成 STA 執行緒 CoUninitialize 之前必須呼叫時。
EAPHost 如何匯出金鑰處理資料?
EAPHost EAP 方法會以 Microsoft 點對點加密 (MPPE) 金鑰的形式,將主要工作階段金鑰匯出 (MSKs) 。 其他索引鍵資料,例如配對主要金鑰 (PMK) ,可以使用 MSK 產生要求者。 若要讓方法在驗證期間產生任何其他金鑰,方法可以將這些金鑰當做廠商特定的屬性提供給支援者。
什麼是 EMSK (擴充主要工作階段金鑰) ?
EMSK 是 EAP 方法匯出的其他索引鍵資料。 EMSK 長度至少為 64 個八位。 EMSK 會在 EAP 用戶端和伺服器之間共用,但不會與驗證器或任何其他協力廠商共用。 目前,EMSK 已保留供日後使用。 如需詳細資訊,請參閱 適用于無線區域網路 的可延伸驗證通訊協定 EAP) 方法需求。
方法何時會取用或產生屬性?
如果 EAP 方法產生屬性或 EMSK,則要求者會取用屬性。 一般而言,由支援者取用的屬性是索引鍵。 取用的屬性包括 eatingPeerId、 eatingServerId、 eatingMethodId、 eatingEMSK和 eatingCredentialsChanged。 如需詳細資訊,請參閱 EAP_ATTRIBUTE_TYPE。 EAP 方法可以匯出其他應用程式特定的 EMSK 材質,例如:
- 工作階段識別碼
- [網路存取保護] (/windows/desktop/NAP/network-access-protection-start-page) (NAP)
802.1X 會取用哪些屬性?
原生無線 802.1X supplicant 會取用下列 EAPHost 驗證屬性:
- 變更密碼通知
- Microsoft 點對點加密 (MPPE) 傳送/接收金鑰。 VendorId/VendorType = 331/16 和 311/1
MPPE 金鑰是由對等和驗證器在成功驗證結束時產生的金鑰。 這些金鑰由 802.1X 和網路存取伺服器使用 (NAS) 來加密和接收的封包。
EAPHost 中EAP_PEER_FLAG_GUEST_ACCESS旗標的目的為何?
當 EAPHostPeerBeginSession中設定此旗標時,EAPHost 會將它解譯為客體授權的要求,並傳回 Null 身分識別回應,然後傳遞至要求並傳回至 EAP 伺服器。
支援者要求機器驗證的方式為何?
設定 EAP_FLAG_MACHINE_AUTH 旗標來要求電腦驗證。
支援者如何要求使用者驗證?
未設定 EAP_FLAG_MACHINE_AUTH 旗標來要求使用者驗證。
何時使用 「EapHostPeerFreeErrorMemory」 而不是 「EapHostFreeEapError」 函式?
EapHostPeerFreeErrorMemory函式僅用於釋放 EAPHost 組態 API 所傳回的EAP_ERROR結構。 EAPHost 設定 API 定義于 EapHostPeerConfigApis.h 中。 相反地, EapHostPeerFreeEapError 函式用於釋放 EAPHost 執行時間 API 所傳回 的EAP_ERROR 結構。 EAPHost 執行時間 API 定義于 EapPApis.h 中。 永遠不要搭配 API 的組態版本使用 API 的執行時間版本;若要這樣做,可能會產生非預期的結果。
我在用來處理 supplicant 上 EAP 驗證會話的相同執行緒中實作我的 UI。 當我引發互動式使用者介面對話方塊以取得認證或其他使用者輸入資料之後,EAPHost 對 EAP 對等方法的下一個呼叫會失敗,並出現 「ERROR_OBJECT_DISCONNECTED」。 為什麼發生此狀況,以及如何解決?
雖然 EAPHost 用戶端 API 都是 C 樣式 API,但這些 C API 只是對應 COM API 的包裝函式。 C 樣式 API 會在多執行緒 COM 環境中執行。 UI 程式碼通常會在 Apartment 執行緒模型中執行。 因為兩個執行緒模型彼此衝突,所以請勿在處理 EAP 驗證的相同執行緒中執行 UI 程式碼。
為什麼 「EapHostPeerBeginSession」 API 會採用 「NotificationHandler」 回呼函式指標作為參數?
NotificationHandler 是要求者必須重新驗證的機制。 有各種案例需要重新驗證要求,包括使用 網路存取保護 進行驗證 (NAP) 。
「EapHostPeerBeginSession」 API 中的 「pConnectionId」 參數用途為何?
pConnectionId 是 supplicant 定義 GUID 值的指標,用來識別屬於 supplicant 的網路連線。 呼叫 NotificationHandler 回呼函式時,會傳遞此 GUID 來識別要求將用於重新驗證要求的網路連線。
如何?知道是否有隔離狀態變更?
只有在系統中至少有一個網路存取保護 (NAP) 隔離強制用戶端 (QEC) 已註冊介面時,使用者才會收到隔離狀態變更的視覺通知。 若是如此,嘗試重新驗證時,使用者將會透過快顯視窗收到隔離狀態變更的通知。
如何?知道系統中是否有 NAP QEC 註冊的介面?
開啟提升許可權的視窗,然後執行下列 netsh 命令:「netsh nap 用戶端顯示狀態」。 如需詳細資訊,請參閱 Netsh 命令。
如果要求者重新驗證,QEC 應該在重新驗證期間使用哪些連線識別碼?
QEC 應該使用相同的連線識別碼,用於上一個會話。
只有一個 EAPHost supplicant 方法可用來顯示使用者介面 (UI) 對話方塊,但 EAP 方法有數種類型的 UI 特定呼叫。 取得 「EapHostPeerResponseInvokeUI」 動作程式碼時,應該呼叫哪個方法,指出要求者必須顯示 UI 對話方塊?
使用者不需要採取任何動作,因為 EAPHost 知道要呼叫的方法函式。 例如,當傳回動作代碼 EapHostPeerResponseInvokeUI時,supplicant 會依下列順序呼叫這三個函式:EapHostPeerGetUICoNtext、EapHostPeerInvokeInteractiveUI和EapHostPeerSetUICoNtext。
認證 BLOB 與組態 BLOB 之間的差異為何?
認證 BLOB 只包含使用者資料,例如使用者名稱、密碼和 PIN。 組態 BLOB 包含控制方法行為的設定。
我可以在 EAPHost 用戶端上啟用追蹤嗎?
是的。 如需詳細資訊,請參閱 啟用追蹤。