Zugriffspunkt- und Authentifizierungsprotokollinteraktion während der Authentifizierung
Die RasEapMakeMessage-Funktion steuert den Großteil der Interaktion zwischen dem Authentifizierungsprotokoll und dem Access Point (AP). RasEapMakeMessage verarbeitet eingehende EAP-Pakete und erstellt EAP-Pakete für die Übertragung an den Remotepeer. Außerdem werden Ereignisse wie Timeouts und Authentifizierungsabschluss verarbeitet.
Wenn eine Nachricht vom Remotepeer empfangen wird, ruft der AP-Authentifizierungsdienst RasEapMakeMessage auf und übergibt einen Zeiger auf die empfangene Nachricht im Parameter pReceivePacket .
Wenn der Dienst RasEapMakeMessage aufruft, wobei pReceivePacket auf NULL festgelegt ist, initiiert der AP entweder das Dialogfeld mit dem Authentifizierungsprotokoll oder fordert das Protokoll an, das letzte Paket erneut zu senden. Das Authentifizierungsprotokoll sollte bestimmen, welche Aktion der Dienst basierend auf seinem Status und aus dem Nachrichtenkontext ausnimmt.
Bei der Rückgabe von RasEapMakeMessage gibt der Wert des Action-Elements der PPP_EAP_OUTPUT-Struktur an, welche Aktion der Authentifizierungsdienst ggf. ausführt. Das Action-Element akzeptiert Werte aus dem PPP_EAP_ACTION aufgezählten Typ.
Wenn ActionEAPACTION_Send, EAPACTION_SendAndDone, EAPACTION_SendWithTimeout oder EAPACTION_SendWithTimeoutInteractive ist, überträgt der Dienst das Paket, auf das vom Parameter pSendPacket verwiesen wird, an den Remotepeer.
Der wert EAPACTION_SendWithTimeout ermöglicht ein Timeout, nach dem der Authentifizierungsdienst davon ausgeht, dass der Link verloren gegangen ist, und trennt die Sitzung.
Der EAPACTION_SendWithTimeoutInteractive-Wert ermöglicht ein unbegrenztes Timeout. Der Authentifikator sollte diesen Wert verwenden, wenn Benutzereingaben auf dem Client erwartet werden. Dieses Timeout ermöglicht dem Benutzer eine nicht angegebene Zeit, um die erforderliche Eingabe abzuschließen.
Wenn ActionEAPACTION_SendWithTimeout oder EAPACTION_SendWithTimeoutInteractive ist, sollte das Authentifizierungsprotokoll den dwIdExpected-Member der PPP_EAP_OUTPUT-Struktur auf den Bezeichner des nächsten Pakets festlegen, der vom Remotepeer erwartet wird. Unabhängig davon, ob das nächste vom Peer empfangene Paket mit diesem Wert übereinstimmt, übergibt der Authentifizierungsdienst das Paket in einem nachfolgenden Aufruf von RasEapMakeMessage an das Authentifizierungsprotokoll. Das Authentifizierungsprotokoll verwirft das Paket möglicherweise im Hintergrund, indem einfach ERROR_PPP_INVALID_PACKET zurückgegeben wird. Wenn ein Paket mit dem erwarteten Bezeichner nicht innerhalb des konfigurierten Timeoutzeitraums empfangen wird, ruft der Authentifizierungsdienst weiterhin RasEapMakeMessage auf. In diesem Fall erfolgt der Aufruf mit dem pReceivePacket-Parameter , der auf NULL festgelegt ist, um anzugeben, dass das vorherige Paket erneut gesendet werden muss.
Wenn das Action-ElementEAPACTION_Done oder EAPACTION_SendAndDone ist, untersucht der Authentifizierungsdienst den dwAuthResultCode-Member von PPP_EAP_OUTPUT. Wenn dwAuthResultCode NO_ERROR ist, war die Authentifizierung erfolgreich. Wenn dwAuthResultCode ein anderer Wert als NO_ERROR ist, ist die Authentifizierung fehlgeschlagen. Der für den Fehlerfall zurückgegebene Fehlercode sollte von Raserror.h, Mprerror.h oder Winerror.h stammen. Mögliche Rückgabecodes sind u. a. die folgenden:
- ERROR_NO_DIALIN_PERMISSION
- ERROR_PASSWD_EXPIRED
- ERROR_ACCT_DISABLED
- ERROR_RESTRICTED_LOGON_HOURS
- ERROR_AUTH_INTERNAL
Wenn ActionEAPACTION_Done oder EAPACTION_SendAndDone ist, sollte das pUserAttributes-Element auf Attribute verweisen, die Attribute desselben Typs überschreiben, die beim Aufruf von RasEapBegin an den Server übergeben wurden.
Das Authentifizierungsprotokoll auf dem Server kann anfordern, dass der Authentifizierungsdienst den aktuellen Authentifizierungsanbieter aufruft, indem EAPACTION_Authenticate im Aktionselement in PPP_EAP_OUTPUT zurückgegeben wird. In diesem Fall verweist der pUserAttributes-Zeiger in PPP_EAP_OUTPUT nur auf Attribute, die vom Authentifizierungsprotokoll auf dem Server generiert wurden. Es enthält keines der Attribute, die beim Aufruf von RasEapBegin an den Server übergeben wurden. Der Authentifizierungsanbieter erfordert diese anfänglichen Attribute nicht, da sich die Anmeldeinformationen für die Authentifizierung innerhalb der EAP-Nachricht selbst und nicht in einem separaten RADIUS-Attribut befinden. Wenn der Authentifizierungsdienst auf die EAPACTION_Authenticate-AktionpUserAttributes in PPP_EAP_INPUT antwortet, verweist auf alle Attribute, die während der Authentifizierung generiert wurden. Diese Attribute werden an das Authentifizierungsprotokoll auf dem Client zurückgegeben.
Wenn das Authentifizierungsprotokoll EAPACTION_Authenticate verwendet, führt der Authentifizierungsanbieter entweder PAP oder MD5-CHAP aus. Diese Authentifizierungsmethode kann nur mit Windows-Clients verwendet werden.
Wenn das Authentifizierungsprotokoll den Benutzer authentifiziert, ohne sich auf einen Authentifizierungsanbieter zu verlassen, muss das Protokoll action nicht auf EAPACTION_Authenticate festlegen. Ein Beispiel für diesen Fall ist EAP-Transport Layer Security (TLS).
Das EAP-Erfolgspaket ist ein nicht bestätigtes Paket. Daher kann es verloren und nicht vom Server erneut ausgeführt werden. Wenn der Authentifizierungsdienst auf dem Client ein NCP-Paket (Network Control Protocol) empfängt, wird der serverseitige Authentifizierungsdienst so fortgesetzt, als ob die Authentifizierung erfolgreich war. Dies liegt daran, dass der Server in die NCP-Phase von PPP gewechselt ist. Dementsprechend ruft der Authentifizierungsdienst RasEapMakeMessage auf, wobei das fSuccessPacketReceived-Element der PPP_EAP_INPUT-Struktur auf TRUE festgelegt ist.
Während der Authentifizierungssitzung erfordert das Authentifizierungsprotokoll möglicherweise eine direkte Interaktion mit dem Benutzer auf dem Client. Der Anbieter des Authentifizierungsprotokolls kann zu diesem Zweck eine interaktive Benutzeroberfläche bereitstellen. Das Authentifizierungsprotokoll kann anfordern, dass der Dienst die interaktive Benutzeroberfläche anzeigt, indem die Elemente fInvokeInteractiveUI, pUIContextData und dwSizeOfUIContextData in der PPP_EAP_OUTPUT-Struktur festgelegt werden. Weitere Informationen zur Verwendung einer interaktiven Benutzeroberfläche finden Sie unter Interaktive Benutzeroberfläche.
Das Authentifizierungsprotokoll sollte eine Benutzeroberfläche nur über den unter Interaktive Benutzeroberfläche beschriebenen Mechanismus anzeigen. Wenn das Authentifizierungsprotokoll selbst die Benutzeroberfläche anzeigt, blockiert der PPP-Thread, bis die Benutzeroberfläche geschlossen wird.
Wenn rasEapMakeMessage während des Authentifizierungsvorgangs einen anderen Wert als NO_ERROR oder ERROR_PPP_INVALID_PACKET zurückgibt, wird die Sitzung getrennt, und der Fehler wird (auf dem Server) protokolliert oder dem Benutzer (auf dem Client) angezeigt.