驗證期間的存取點和驗證通訊協定互動

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

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

如果服務呼叫 RasEapMakeMessage 並將 pReceivePacket 設定為 Null,則 AP 會使用驗證通訊協定起始對話方塊,或要求通訊協定重新傳送最後一個封包。 驗證通訊協定應該根據服務的狀態和訊息內容來判斷要採取的動作。

RasEapMakeMessage傳回時,PPP_EAP_OUTPUT結構的Action成員值會指出驗證服務會採取什麼動作。 Action成員會從PPP_EAP_ACTION列舉型別取得值。

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

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

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

如果Action是EAPACTION_SendWithTimeoutEAPACTION_SendWithTimeoutInteractive,驗證通訊協定應該將PPP_EAP_OUTPUT結構的dwIdExpected成員設定為預期來自遠端對等之下一個封包的識別碼。 不論從對等接收的下一個封包是否符合此值,驗證服務都會在 後續呼叫 RasEapMakeMessage時,將封包傳遞至驗證通訊協定。 驗證通訊協定可能會直接傳回 ERROR_PPP_INVALID_PACKET,以無訊息方式捨棄封包。 如果在設定的逾時期間內未收到具有預期識別碼的封包,驗證服務仍會呼叫 RasEapMakeMessage。 在此情況下,呼叫會使用設定為NullpReceivePacket參數進行,以指出必須再次傳送先前的封包。

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

  • ERROR_NO_DIALIN_PERMISSION
  • ERROR_PASSWD_EXPIRED
  • ERROR_ACCT_DISABLED
  • ERROR_RESTRICTED_LOGON_HOURS
  • ERROR_AUTH_INTERNAL

動作EAPACTION_DoneEAPACTION_SendAndDone的情況下,pUserAttributes成員應該指向覆寫呼叫RasEapBegin中傳遞至伺服器之相同類型屬性的屬性。

伺服器上的驗證通訊協定可以要求驗證服務叫用目前的驗證提供者,方法是在PPP_EAP_OUTPUTAction成員中傳回EAPACTION_Authenticate。 在此情況下,PPP_EAP_OUTPUT中的pUserAttributes指標只會指向伺服器上驗證通訊協定所產生的屬性。 它不包含在 呼叫 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

在驗證會話過程中,驗證通訊協定可能需要直接與用戶端上的使用者互動。 驗證通訊協定廠商可以為此目的提供互動式使用者介面。 驗證通訊協定可以藉由在PPP_EAP_OUTPUT結構中設定fInvokeInteractiveUIpUICoNtextDatadwSizeOfUICoNtextData成員來要求服務顯示互動式 UI。 如需使用互動式 UI 的詳細資訊,請參閱 互動式使用者介面

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

如果在驗證程式期間,RasEapMakeMessage會傳回NO_ERROR或ERROR_PPP_INVALID_PACKET以外的任何值,會話會中斷連線,並在伺服器上 (記錄錯誤) ,或顯示給用戶端) 上的使用者 (。