RasEapMakeMessage 함수는 인증 프로토콜과 AP(액세스 지점) 간의 대부분의 상호 작용을 제어합니다. RasEapMakeMessage 들어오는 EAP 패킷을 처리하고 원격 피어로 전송하기 위한 EAP 패킷을 만듭니다. 또한 시간 제한 및 인증 완료와 같은 이벤트를 처리합니다.
원격 피어에서 메시지를 받으면 AP 인증 서비스는 RasEapMakeMessage호출하여 pReceivePacket 매개 변수의 수신된 메시지에 대한 포인터를 전달합니다.
서비스에서 RasEapMakeMessage를 호출할 때 pReceivePacket가 NULL로 설정된 경우, AP는 인증 프로토콜로 대화를 시작하거나 프로토콜에 마지막 패킷을 다시 보내도록 요청합니다. 인증 프로토콜은 해당 상태 및 메시지 컨텍스트에 따라 서비스가 수행하는 작업을 결정해야 합니다.
RasEapMakeMessage반환 시 PPP_EAP_OUTPUT 구조의 Action 멤버 값은 인증 서비스에서 수행하는 작업(있는 경우)을 나타냅니다. Action 멤버는 PPP_EAP_ACTION 열거형 형식의 값을 사용합니다.
작업이 EAPACTION_Send, EAPACTION_SendAndDone, EAPACTION_SendWithTimeout또는 EAPACTION_SendWithTimeoutInteractive인 경우에, 서비스는 pSendPacket 매개 변수가 가리키는 패킷을 원격 피어로 전송합니다.
EAPACTION_SendWithTimeout 값을 사용하면 시간 초과가 허용되며, 그 후 인증 서비스에서 링크가 손실되었다고 가정하고 세션의 연결을 끊습니다.
EAPACTION_SendWithTimeoutInteractive 값을 사용하면 시간 제한이 무한정 가능합니다. 인증자는 클라이언트에서 사용자 입력을 예상할 때 이 값을 사용해야 합니다. 이 시간 제한은 사용자에게 필요한 입력을 완료하는 데 지정되지 않은 시간을 허용합니다.
작업EAPACTION_SendWithTimeout 또는 EAPACTION_SendWithTimeoutInteractive경우 인증 프로토콜은 PPP_EAP_OUTPUT 구조체의 dwIdExpected 멤버를 원격 피어에서 예상되는 다음 패킷의 식별자에 설정해야 합니다. 피어로부터 받은 다음 패킷이 이 값과 일치하는지 여부에 관계없이 인증 서비스는 RasEapMakeMessage대한 후속 호출에서 인증 프로토콜에 패킷을 전달합니다. 인증 프로토콜은 단순히 ERROR_PPP_INVALID_PACKET반환하여 패킷을 자동으로 삭제할 수 있습니다. 구성된 제한 시간 내에 예상 식별자가 있는 패킷을 받지 못한 경우 인증 서비스는 여전히 RasEapMakeMessage호출합니다. 이 경우 이전 패킷을 다시 보내야 함을 나타내기 위해 pReceivePacket 매개 변수를 NULL설정하여 호출합니다.
Action 멤버가 EAPACTION_Done 또는 EAPACTION_SendAndDone인 경우 인증 서비스는 PPP_EAP_OUTPUT의 dwAuthResultCode 멤버를 검사합니다. dwAuthResultCode가 NO_ERROR인 경우, 인증에 성공했습니다. dwAuthResultCode NO_ERROR 이외의 값이면 인증에 실패했습니다. 오류 사례에 대해 반환된 오류 코드는 Raserror.h, Mprerror.h 또는 Winerror.h에서 가져옵니다. 가능한 반환 코드는 다음을 포함하지만 제한되지는 않습니다.
- ERROR_NO_DIALIN_PERMISSION(다이얼인 권한 없음)
- 비밀번호 만료 오류
- 오류_계정_비활성화됨
- 제한된 로그인 시간 오류
- 인증 내부 오류
작업이EAPACTION_Done 또는 EAPACTION_SendAndDone인 경우, pUserAttributes 멤버는 서버에 RasEapBegin호출 시 전달된 동일한 형식의 특성을 재정의하는 특성을 가리켜야 합니다.
서버의 인증 프로토콜은 인증 서비스가 PPP_EAP_OUTPUT의 Action 구성 요소에서 EAPACTION_Authenticate을 반환함으로써 현재 인증 공급자를 호출하도록 요청할 수 있습니다. 이 경우 PPP_EAP_OUTPUT의 pUserAttributes 포인터는 서버에서 인증 프로토콜에 의해 생성된 특성만을 가리킵니다. RasEapBegin호출에서 서버에 전달된 특성은 포함되지 않습니다. 인증 자격 증명은 별도의 RADIUS 특성이 아니라 EAP 메시지 자체 내에 있으므로 인증 공급자는 이러한 초기 특성을 필요로 하지 않습니다. 인증 서비스가 EAPACTION_Authenticate 작업에 응답할 때, PPP_EAP_INPUT내의 pUserAttributes 는 인증 중에 생성된 모든 특성을 가리킵니다. 이러한 특성은 클라이언트의 인증 프로토콜로 반환됩니다.
인증 프로토콜이 EAPACTION_Authenticate사용하는 경우 인증 공급자는 PAP 또는 MD5-CHAP를 수행합니다. 이 인증 방법은 Windows 클라이언트에서만 사용할 수 있습니다.
인증 프로토콜이 인증 공급자를 사용하지 않고 사용자를 인증하는 경우 프로토콜이 작업EAPACTION_Authenticate설정할 필요가 없습니다. 이 사례의 예로 EAP-Transport TLS(Layer Security)가 있습니다.
EAP 성공 패킷은 승인되지 않은 패킷입니다. 따라서 서버에서 손실될 수 있으며 다시 전송되지 않을 수 있습니다. 클라이언트의 인증 서비스가 NCP(네트워크 제어 프로토콜) 패킷을 받으면 서버 쪽 인증 서비스는 인증에 성공한 것처럼 진행됩니다. 서버가 PPP의 NCP 단계로 이동했기 때문입니다. 따라서 인증 서비스는 PPP_EAP_INPUT 구조체의 fSuccessPacketReceived 멤버가 TRUE로 설정되었을 때 RasEapMakeMessage를 호출합니다.
인증 세션 중에 인증 프로토콜은 클라이언트의 사용자와 직접 상호 작용해야 할 수 있습니다. 인증 프로토콜 공급업체는 이 목적을 위해 대화형 사용자 인터페이스를 제공할 수 있습니다. 인증 프로토콜은 PPP_EAP_OUTPUT 구조에서 fInvokeInteractiveUI, pUIContextData및 dwSizeOfUIContextData 멤버를 설정하여 서비스에 대화형 UI를 표시하도록 요청할 수 있습니다. 대화형 UI 사용에 대한 자세한 내용은 대화형 사용자 인터페이스참조하세요.
인증 프로토콜은 Interactive User Interface설명된 메커니즘을 통해서만 사용자 인터페이스를 표시해야 합니다. 인증 프로토콜 자체에 사용자 인터페이스가 표시되면 PPP 스레드는 사용자 인터페이스가 해제될 때까지 차단됩니다.
인증 프로세스 중에 RasEapMakeMessageNO_ERROR 또는 ERROR_PPP_INVALID_PACKET이외의 값을 반환하면 세션의 연결이 끊어지고 오류가 기록되거나(서버에서) 사용자에게 표시됩니다(클라이언트의 경우).