Partilhar via


Ponto de acesso e interação do protocolo de autenticação durante a autenticação

A funçãoRasEapMakeMessage controla a maior parte da interação entre o protocolo de autenticação e o Ponto de Acesso (AP). RasEapMakeMessage processa pacotes EAP de entrada e cria pacotes EAP para transmissão para o peer remoto. Ele também processa eventos como tempo limite e conclusão de autenticação.

Se uma mensagem for recebida do peer remoto, o serviço de autenticação AP chamará RasEapMakeMessage, passando um ponteiro para a mensagem recebida no parâmetro pReceivePacket.

Se o serviço chamar RasEapMakeMessage com pReceivePacket definido como NULL, o AP está a iniciar o diálogo com o protocolo de autenticação ou a solicitar que o protocolo reenvie o último pacote. O protocolo de autenticação deve determinar qual ação o serviço está executando com base em seu estado e a partir do contexto da mensagem.

Ao retornar de RasEapMakeMessage, o valor do membro Ação da estrutura PPP_EAP_OUTPUT indica qual ação, se houver, o serviço de autenticação toma. O membro Action assume valores do tipo enumerado PPP_EAP_ACTION.

Se Action for EAPACTION_Send, EAPACTION_SendAndDone, EAPACTION_SendWithTimeoutou EAPACTION_SendWithTimeoutInteractive, o serviço transmite o pacote apontado pelo parâmetro pSendPacket para o parceiro remoto.

O valor EAPACTION_SendWithTimeout permite um tempo limite, após o qual o serviço de autenticação assume que o link foi perdido e desconecta a sessão.

O valor EAPACTION_SendWithTimeoutInteractive permite que um tempo limite infinito seja definido. O autenticador deve usar esse valor ao esperar a entrada do usuário no cliente. Esse tempo limite permite ao usuário uma quantidade não especificada de tempo para concluir a entrada necessária.

Se Action é EAPACTION_SendWithTimeout ou EAPACTION_SendWithTimeoutInteractive, o protocolo de autenticação deverá estabelecer o dwIdExpected membro da estrutura PPP_EAP_OUTPUT para o identificador do próximo pacote esperado do par remoto. Independentemente de o próximo pacote recebido do par corresponder a esse valor, o serviço de autenticação passa o pacote para o protocolo de autenticação em uma chamada subsequente para RasEapMakeMessage. O protocolo de autenticação pode descartar silenciosamente o pacote simplesmente retornando ERROR_PPP_INVALID_PACKET. Se um pacote com o identificador esperado não for recebido dentro do período de tempo limite configurado, o serviço de autenticação ainda chamará RasEapMakeMessage. Nesse caso, a chamada é feita com o parâmetro pReceivePacket definido como NULL, para indicar que o pacote anterior precisa ser enviado novamente.

Se o membro Action for EAPACTION_Done ou EAPACTION_SendAndDone, o serviço de autenticação examinará o membro dwAuthResultCode de PPP_EAP_OUTPUT. Se o resultado da autenticação dwAuthResultCode for NO_ERROR, a autenticação foi bem-sucedida. Se dwAuthResultCode for um valor diferente de NO_ERROR, a autenticação falhou. O código de erro retornado para o caso de falha deve vir de Raserror.h, Mprerror.h ou Winerror.h. Os códigos de devolução possíveis incluem, mas não estão limitados a, o seguinte:

  • ERROR_NO_DIALIN_PERMISSION
  • ERRO_SENHA_EXPIRADA
  • ERRO_CONTA_DESATIVADA
  • ERRO_HORAS_DE_LOGIN_RESTRITAS
  • ERRO_AUTENTICAÇÃO_INTERNA

No caso de o Action ser EAPACTION_Done ou EAPACTION_SendAndDone, o membro pUserAttributes deve apontar para atributos que se sobrepõem aos atributos do mesmo tipo que foram passados para o servidor na chamada para RasEapBegin.

O protocolo de autenticação no servidor pode solicitar que o serviço de autenticação invoque o provedor de autenticação atual, retornando EAPACTION_Authenticate no membro Action em PPP_EAP_OUTPUT. Nesse caso, o ponteiro pUserAttributes em PPP_EAP_OUTPUT aponta apenas para os atributos que foram gerados pelo protocolo de autenticação no servidor. Ele não inclui nenhum dos atributos que foram passados para o servidor na chamada para RasEapBegin. O provedor de autenticação não requer esses atributos iniciais porque as credenciais de autenticação estão dentro da própria mensagem EAP, não em um atributo RADIUS separado. Quando o serviço de autenticação responde à ação EAPACTION_Authenticate, o pUserAttributes no PPP_EAP_INPUT, aponta para todos os atributos gerados durante a autenticação. Esses atributos são retornados ao protocolo de autenticação no cliente.

Se o protocolo de autenticação usar EAPACTION_Authenticate, o provedor de autenticação executará PAP ou MD5-CHAP. Esse método de autenticação pode ser usado somente com clientes Windows.

Se o protocolo de autenticação autenticar o usuário sem depender de um provedor de autenticação, não será necessário que o protocolo defina Action como EAPACTION_Authenticate. Um exemplo deste caso é EAP-Transport Layer Security (TLS).

O pacote de sucesso EAP é um pacote não reconhecido. Portanto, a mensagem pode ser perdida e não reenviada pelo servidor. Se o serviço de autenticação no cliente receber um pacote NCP (Network Control Protocol), o serviço de autenticação do lado do servidor prosseguirá como se a autenticação tivesse sido bem-sucedida. Isso ocorre porque o servidor passou para a fase NCP do PPP. Assim, o serviço de autenticação chama RasEapMakeMessage com o fSuccessPacketReceived membro da estrutura PPP_EAP_INPUT definido como TRUE.

Durante a sessão de autenticação, o protocolo de autenticação pode exigir interação diretamente com o usuário no cliente. O fornecedor do protocolo de autenticação pode fornecer uma interface de usuário interativa para essa finalidade. O protocolo de autenticação pode solicitar que o serviço exiba a interface do usuário interativa definindo os fInvokeInteractiveUI, pUIContextDatae dwSizeOfUIContextData membros na estrutura PPP_EAP_OUTPUT. Para obter mais informações sobre como usar uma interface do usuário interativa, consulte Interactive User Interface.

O protocolo de autenticação deve apresentar uma interface de utilizador apenas através do mecanismo descrito em Interactive User Interface. Se o próprio protocolo de autenticação exibir a interface do usuário, o thread PPP será bloqueado até que a interface do usuário seja descartada.

Se, durante o processo de autenticação, RasEapMakeMessage retornar qualquer valor diferente de NO_ERROR ou ERROR_PPP_INVALID_PACKET, a sessão será desconectada e o erro será registrado (no servidor) ou exibido para o usuário (no cliente).