Udostępnij przez


Interakcja z punktem dostępu i protokołem uwierzytelniania podczas uwierzytelniania

Funkcja RasEapMakeMessage kontroluje większość interakcji między protokołem uwierzytelniania a punktem dostępu (AP). RasEapMakeMessage przetwarza przychodzące pakiety EAP i tworzy pakiety EAP na potrzeby transmisji do zdalnego węzła. Przetwarza również zdarzenia, takie jak przekroczenia limitu czasu i ukończenie uwierzytelniania.

Jeśli komunikat zostanie odebrany od zdalnego równorzędnego partnera, usługa uwierzytelniania AP wywołuje RasEapMakeMessage, przekazując wskaźnik do odebranego komunikatu w parametrze pReceivePacket.

Jeśli usługa wywołuje RasEapMakeMessage z pReceivePacket ustawioną na NULL, AP inicjuje okno dialogowe z protokołem uwierzytelniania lub żąda, aby protokół ponownie wysłał ostatni pakiet. Protokół uwierzytelniania powinien określać, która akcja jest wykonywana przez usługę na podstawie jego stanu i kontekstu komunikatu.

Po powrocie z RasEapMakeMessagewartość elementu Action struktury PPP_EAP_OUTPUT wskazuje, jaką akcję, jeśli istnieje, usługa uwierzytelniania przyjmuje. Element Action przyjmuje wartości z wyliczonego typu PPP_EAP_ACTION.

Jeśli akcja jest EAPACTION_Send, EAPACTION_SendAndDone, EAPACTION_SendWithTimeoutlub EAPACTION_SendWithTimeoutInteractive, usługa przesyła pakiet wskazywany przez parametr pSendPacket do elementu równorzędnego zdalnego.

Wartość EAPACTION_SendWithTimeout pozwala na przekroczenie limitu czasu, po upływie którego usługa uwierzytelniania zakłada utratę łącza i rozłącza sesję.

Wartość EAPACTION_SendWithTimeoutInteractive pozwala na przekroczenie nieskończonego limitu czasu. Wystawca uwierzytelnienia powinien używać tej wartości podczas oczekiwania na dane wejściowe użytkownika na kliencie. Ten limit czasu umożliwia użytkownikowi nieokreślony czas na ukończenie wymaganych danych wejściowych.

Jeśli akcja jest EAPACTION_SendWithTimeout lub EAPACTION_SendWithTimeoutInteractive, protokół uwierzytelniania powinien ustawić dwIdExpected elementu struktury PPP_EAP_OUTPUT na identyfikator następnego pakietu oczekiwanego od partnera zdalnego. Niezależnie od tego, czy następny pakiet otrzymany od partnera jest zgodny z tą wartością, usługa uwierzytelniania przekazuje pakiet do protokołu uwierzytelniania podczas kolejnego wywołania do RasEapMakeMessage. Protokół uwierzytelniania może dyskretnie odrzucić pakiet, zwracając po prostu ERROR_PPP_INVALID_PACKET. Jeśli pakiet z oczekiwanym identyfikatorem nie zostanie odebrany w skonfigurowanym przedziale czasu, usługa uwierzytelniania nadal wywołuje RasEapMakeMessage. W takim przypadku wywołanie jest wykonywane z parametrem pReceivePacket ustawionym na null, aby wskazać, że poprzedni pakiet musi zostać wysłany ponownie.

Jeśli element członkowski akcji jest EAPACTION_Done lub EAPACTION_SendAndDone, usługa uwierzytelniania sprawdza dwAuthResultCode członka PPP_EAP_OUTPUT. Jeśli wartość dwAuthResultCode to NO_ERROR, uwierzytelnianie zakończyło się pomyślnie. Jeśli dwAuthResultCode jest wartością inną niż NO_ERROR, uwierzytelnianie nie powiodło się. Kod błędu zwrócony dla przypadku błędu powinien pochodzić z Raserror.h, Mprerror.h lub Winerror.h. Możliwe kody powrotne obejmują, ale nie są ograniczone do następujących:

  • BŁĄD: Brak uprawnień do połączeń przychodzących
  • BŁĄD_HASŁO_WYGAŚNIĘTE
  • BŁĄD_KONTO_WYŁĄCZONE
  • Błąd: Ograniczone godziny logowania
  • Wewnętrzny błąd uwierzytelniania

W przypadku, gdy Action to EAPACTION_Done lub EAPACTION_SendAndDone, członek pUserAttributes powinien wskazywać na atrybuty, które nadpisują atrybuty tego samego typu, przekazane do serwera podczas wywołania RasEapBegin.

Protokół uwierzytelniania na serwerze może zażądać, aby usługa uwierzytelniania wywołała bieżącego dostawcę uwierzytelniania, zwracając EAPACTION_Authenticate w elemencie akcji w PPP_EAP_OUTPUT. W tym przypadku pUserAttributes wskaźnik w PPP_EAP_OUTPUT wskazuje tylko atrybuty wygenerowane przez protokół uwierzytelniania na serwerze. Nie zawiera żadnych atrybutów przekazanych do serwera w wywołaniu RasEapBegin. Dostawca uwierzytelniania nie wymaga tych atrybutów początkowych, ponieważ poświadczenia uwierzytelniania znajdują się wewnątrz samego komunikatu protokołu EAP, a nie w osobnym atrybucie RADIUS. Gdy usługa uwierzytelniania reaguje na akcję EAPACTION_Authenticate, pUserAttributes w PPP_EAP_INPUT, wskazuje wszystkie atrybuty wygenerowane podczas uwierzytelniania. Te atrybuty są zwracane do protokołu uwierzytelniania na kliencie.

Jeśli protokół uwierzytelniania używa EAPACTION_Authenticate, dostawca uwierzytelniania wykonuje protokół PAP lub MD5-CHAP. Tej metody uwierzytelniania można używać tylko w przypadku klientów z systemem Windows.

Jeśli protokół uwierzytelniania uwierzytelnia użytkownika bez polegania na dostawcy uwierzytelniania, nie ma potrzeby, aby protokół kiedykolwiek ustawiał Action na EAPACTION_Authenticate. Przykładem tego przypadku jest EAP-Transport Layer Security (TLS).

Pakiet sukcesu EAP jest pakietem niepotwierdzonym. W związku z tym można go utracić i nie wysłać ponownie przez serwer. Jeśli usługa uwierzytelniania na kliencie otrzymuje pakiet protokołu NCP (Network Control Protocol), usługa uwierzytelniania po stronie serwera będzie kontynuowana tak, jakby uwierzytelnianie zakończyło się pomyślnie. Dzieje się tak, ponieważ serwer przeniósł się do fazy NCP programu PPP. W związku z tym usługa uwierzytelniania wywołuje RasEapMakeMessage za pomocą fSuccessPacketReceived składowej struktury PPP_EAP_INPUT ustawionej na TRUE.

W trakcie sesji uwierzytelniania protokół uwierzytelniania może wymagać interakcji bezpośrednio z użytkownikiem na kliencie. W tym celu dostawca protokołu uwierzytelniania może udostępnić interaktywny interfejs użytkownika. Protokół uwierzytelniania może zażądać, aby usługa wyświetlała interaktywny interfejs użytkownika, ustawiając fInvokeInteractiveUI, pUIContextDatai dwSizeOfUIContextData elementów członkowskich w strukturze PPP_EAP_OUTPUT. Aby uzyskać więcej informacji na temat korzystania z interaktywnego interfejsu użytkownika, zobacz interaktywny interfejs użytkownika.

Protokół uwierzytelniania powinien wyświetlać interfejs użytkownika tylko za pomocą mechanizmu opisanego w interaktywny interfejs użytkownika. Jeśli sam protokół uwierzytelniania wyświetla interfejs użytkownika, wątek PPP blokuje się do momentu zamknięcia interfejsu użytkownika.

Jeśli podczas procesu uwierzytelniania RasEapMakeMessage zwraca dowolną wartość inną niż NO_ERROR lub ERROR_PPP_INVALID_PACKET, sesja zostanie rozłączona, a błąd zostanie zarejestrowany (na serwerze) lub wyświetlony użytkownikowi (na kliencie).