共用方式為


驗證過程中存取點與認證協議的互動

RasEapMakeMessage 函式會控制驗證通訊協定與存取點 (AP) 之間的大部分互動。 RasEapMakeMessage 處理傳入的 EAP 封包,並建立 EAP 封包以傳輸至遠端對等。 它也會處理逾時和驗證完成等事件。

如果收到來自遠端對等的訊息,AP 驗證服務會呼叫 RasEapMakeMessage,並將用以接收訊息的指標傳遞給 pReceivePacket 參數。

如果服務呼叫 RasEapMakeMessage,且 pReceivePacket 設定為 NULL,則 AP 會以驗證通訊協定起始對話,或要求通訊協定重新傳送最後一個封包。 驗證通訊協議應該根據服務的狀態和訊息內容判斷要採取哪些動作。

RasEapMakeMessage傳回時,PPP_EAP_OUTPUT 結構的 Action 成員的值指出驗證服務將採取的任何動作。 Action 成員取值自 PPP_EAP_ACTION 列舉類型。

如果 動作EAPACTION_SendEAPACTION_SendAndDoneEAPACTION_SendWithTimeoutEAPACTION_SendWithTimeoutInteractive,服務會將 pSendPacket 參數所指向的封包傳送至遠端對等。

EAPACTION_SendWithTimeout 值允許逾時,之後驗證服務會假設連結遺失,並中斷會話連線。

EAPACTION_SendWithTimeoutInteractive 值允許發生無限的逾時。 驗證器應該在用戶端上預期使用者輸入時使用此值。 這次逾時可讓使用者有未指定的時間量來完成所需的輸入。

如果 動作EAPACTION_SendWithTimeoutEAPACTION_SendWithTimeoutInteractive,驗證通訊協議應該將 PPP_EAP_OUTPUT 結構中的 dwIdExpected 成員設定為來自遠端對等方的下一個封包識別碼。 無論從對等接收的下一個封包是否符合此值,驗證服務都會在後續呼叫 rasEapMakeMessage 中,將封包傳遞至驗證通訊協定。 認證協議可能會直接傳回 ERROR_PPP_INVALID_PACKET,從而靜默地捨棄封包。 如果在設定的逾時期間內未收到具有預期識別碼的封包,驗證服務仍會呼叫 RasEapMakeMessage。 在此情況下,會使用設定為 NULL的 pReceivePacket pReceivePacket 進行呼叫,表示必須再次傳送先前的封包。

如果 Action 成員是 EAPACTION_DoneEAPACTION_SendAndDone,則驗證服務會檢查 PPP_EAP_OUTPUTdwAuthResultCode 成員。 如果 dwAuthResultCode 是 NO_ERROR,則驗證成功。 如果 dwAuthResultCode 不是NO_ERROR值,驗證就會失敗。 針對失敗案例傳回的錯誤碼應該來自 Raserror.h、Mprerror.h 或 Winerror.h。 可能的回傳代碼包括但不限於下列代碼:

  • ERROR_NO_DIALIN_PERMISSION
  • 密碼已過期錯誤
  • 錯誤_帳戶已停用
  • 錯誤_受限的登入時間
  • 驗證錯誤_內部

ActionEAPACTION_DoneEAPACTION_SendAndDone的情況下,pUserAttributes 成員應該指向那些覆寫在呼叫 RasEapBegin時傳遞至伺服器的相同類型屬性的屬性。

伺服器上的驗證通訊協定可以藉由在 PPP_EAP_OUTPUT中的 Action 成員中傳回 EAPACTION_Authenticate,要求驗證服務叫用目前的驗證提供者。 在此情況下,pUserAttributes 指標 PPP_EAP_OUTPUT 只指向伺服器上驗證通訊協定所產生的屬性。 它不包含在呼叫 RasEapBegin中傳遞至伺服器的任何屬性。 驗證提供者不需要這些初始屬性,因為驗證認證位於 EAP 訊息本身內,而不是位於個別 RADIUS 屬性中。 當驗證服務回應 EAPACTION_Authenticate 動作時,在 PPP_EAP_INPUT中,pUserAttributes 指向驗證期間所產生的所有屬性。 這些屬性會傳回至用戶端上的驗證通訊協定。

如果驗證通訊協定使用 EAPACTION_Authenticate,驗證提供者會執行 PAP 或 MD5-CHAP。 此驗證方法只能與 Windows 用戶端搭配使用。

如果驗證通訊協定在沒有依賴驗證提供者的情況下驗證使用者,則不需要將通訊協定 動作 設定為 EAPACTION_Authenticate。 此案例的範例是 EAP-Transport 層安全性 (TLS)。

EAP 成功封包是非認可封包。 因此,它可能會遺失,且不會由伺服器重新傳送。 如果用戶端上的驗證服務收到網路控制通訊協定 (NCP) 封包,伺服器端驗證服務會繼續,就像驗證成功一樣。 這是因為伺服器已移至 PPP 的 NCP 階段。 因此,驗證服務會呼叫 RasEapMakeMessage,並將 PPP_EAP_INPUT 結構 fSuccessPacketReceived 成員設為 TRUE

在驗證會話期間,驗證通訊協定可能需要直接與用戶端上的用戶互動。 驗證通訊協議廠商可以提供互動式使用者介面供此用途使用。 驗證通訊協定可以透過設定 fInvokeInteractiveUIpUIContextDatadwSizeOfUIContextData 成員,要求服務顯示互動式使用者介面,這些成員位於 PPP_EAP_OUTPUT 結構中。 如需使用互動式 UI 的詳細資訊,請參閱 互動式使用者介面

驗證通訊協議應該只透過 互動式使用者介面中所述的機制來顯示使用者介面。 如果驗證通訊協定本身會顯示使用者介面,PPP 線程會封鎖直到使用者介面關閉為止。

如果在驗證過程中,RasEapMakeMessage 傳回 NO_ERRORERROR_PPP_INVALID_PACKET以外的任何值,會話會中斷連線,而且錯誤會記錄在伺服器上或向用戶顯示(在用戶端上)。