Invocando as DLLs de extensão
Observação
O IAS (Serviço de Autenticação da Internet) foi renomeado como NPS (Servidor de Política de Rede) a partir do Windows Server 2008. O conteúdo deste tópico se aplica ao IAS e ao NPS. Em todo o texto, o NPS é usado para se referir a todas as versões do serviço, incluindo as versões originalmente conhecidas como IAS.
As DLLs de extensão NPS devem exportar pelo menos uma das seguintes funções de retorno de chamada: RadiusExtensionProcess, RadiusExtensionProcessEx ou RadiusExtensionProcess2. O NPS chama essas funções para cada pacote de autenticação ou contabilidade válido que recebe do NAS (Servidor de Acesso à Rede). O NPS chama essas funções em cada uma das DLLs listadas abaixo da chave do Registro de Parâmetros do NPS. As DLLs são chamadas na ordem em que estão listadas.
Se uma DLL de extensão NPS exportar mais de uma das funções acima, o NPS invocará apenas uma delas: a função mais recente compatível com o sistema operacional.
Observação
Originalmente, o IAS tinha suporte apenas para RadiusExtensionProcess. A IAS também dá suporte a RadiusExtensionProcessEx. O IAS (e NPS posterior) também dá suporte a RadiusExtensionProcess2.
As DLLs de extensão NPS também podem exportar as funções RadiusExtensionInit e RadiusExtensionTerm . Se estiverem presentes, o NPS chamará essas funções quando o serviço for iniciado e interrompido, respectivamente.
Função de retorno de chamada RadiusExtensionProcess
Em uma DLL de Extensão de Autenticação, RadiusExtensionProcess recebe todos os atributos recebidos pelo NPS na solicitação de autenticação ou contabilidade. Usando esses atributos, a função pode executar validações adicionais, verificar as autorizações do usuário ou enviar registros contábeis para um servidor de estado central.
Em uma DLL de Extensão de Autorização, RadiusExtensionProcess recebe todos os atributos gerados pelo serviço de autorização do NPS. Esses são os atributos retornados no pacote Access-Accept.
Depois de chamar RadiusExtensionProcess, a ação executada pelo NPS depende do valor retornado de RadiusExtensionProcess e do valor retornado no parâmetro pfAction . Esses valores são listados na tabela a seguir.
pfAction | DLL da extensão de autenticação | DLL de extensão de autorização |
---|---|---|
Aceitar | Ignora as DLLs de extensão de autenticação adicionais e também ignora o mecanismo de autenticação do NPS. | Aceitar não permitido. |
Rejeitar | Ignora as DLLs de extensão de autenticação adicionais e também ignora o mecanismo de autenticação do NPS. Access-Reject pacote é enviado. | Ignora as DLLs de extensão de autorização adicionais. |
Continuar | O pacote será enviado para a próxima DLL de Extensão de Autenticação ou para o mecanismo de autenticação do NPS se não houver mais DLLs de extensão de autenticação listadas no registro. | O pacote será enviado para a próxima DLL de Extensão de Autorização ou para o log de contabilidade do NPS se não houver mais DLLs de extensão de autorização listadas no registro. |
Para todas as DLLs de extensão, se RadiusExtensionProcess retornar um erro, o pacote será descartado. Os pacotes descartados devido a um erro não são processados pelo log de contabilidade do NPS.
Se ocorrer um erro, o NPS postará um evento de erro genérico no Log de Eventos. É recomendável que a DLL de extensão forneça log de erros adicional.
Para obter mais informações e um diagrama que representa o processo anterior, consulte Sobre extensões NPS.
RadiusExtensionProcess deverá retornar um erro se não puder verificar a aceitação ou rejeição do pacote. Essa situação poderá surgir se um problema de rede impedir que RadiusExtensionProcess se comunique com seu banco de dados de autenticação de usuário.
Ao processar um pacote de contabilidade, o parâmetro pfAction é NULL, portanto, pfAction não pode ser definido. Retornar um erro da função RadiusExtensionProcess durante o processamento de uma solicitação de contabilidade faz com que a solicitação seja descartada pelo NPS.
Observação
Depois de receber uma aceitação, o NPS não chama RadiusExtensionProcess nas DLLs restantes na sequência. Como algumas funções de autenticação também podem implementar autorizações, ignorar essas funções de autenticação pode fazer com que as autorizações sejam omitidas. Se uma instância de RadiusExtensionProcess retornar Accept, é importante não fazer nenhuma suposição sobre as autorizações recuperadas.
Se Continuar ou Aceitar for retornado, o perfil correspondente ao realm será enviado de volta no pacote Access-Accept.
As DLLs de extensão de autenticação devem ser projetadas para coexistir com os provedores de autenticação NPS internos e com outras DLLs de extensão. Se uma extensão for aplicável apenas a um determinado banco de dados de usuário (por exemplo, Windows Active Directory), ela deverá verificar o atributo ratProvider passado no parâmetro pAttrs , antes de processar a solicitação. O atributo ratProvider seria um de uma lista de atributos apontados pelo parâmetro pAttrs .
As DLLs de extensão não devem rejeitar solicitações porque os atributos necessários estão ausentes. Por exemplo, se uma extensão de autenticação exigir o atributo User-Password, ratUserPassword e o atributo não estiver presente, a extensão deverá retornar uma ação de raContinue para dar a outras extensões e provedores a chance de processar a solicitação.
O NPS chama a função RadiusExtensionProcess depois que a decisão de usar um banco de dados de autenticação específico é tomada, mas antes que o usuário seja autenticado. Portanto, informações sobre qual banco de dados de autenticação usar estão disponíveis para a função, para que a função possa marcar para as autorizações do usuário no banco de dados de autenticação apropriado. O NPS dá suporte a vários bancos de dados de autenticação, incluindo o Windows Active Directory.
Função de retorno de chamada RadiusExtensionProcessEx
As DLLs de extensão NPS podem exportar RadiusExtensionProcessEx em vez ou, além de RadiusExtensionProcess. Essa função permite que a DLL acrescente atributos de autorização adicionais à resposta de autenticação.
As mesmas informações descritas na seção Função de Retorno de Chamada RadiusExtensionProcess se aplicam à função RadiusExtensionProcessEx .
RadiusExtensionProcessEx não pode modificar ou remover nenhum dos atributos presentes. Se surgir um cenário no qual a DLL deve modificar ou remover atributos, a única opção é usar a interface do usuário do NPS para garantir que os atributos não estejam presentes. Por padrão, nenhum atributo de autorização está presente. Qualquer um que esteja presente deve ter sido adicionado por meio da interface do usuário.
Se várias DLLs de Autorização estiverem configuradas e algumas dessas DLLs implementarem RadiusExtensionProcessEx, a função RadiusExtensionProcess/Ex em uma determinada DLL não receberá os atributos das DLLs de autorização anteriormente chamadas. Ele recebe apenas os atributos gerados pelo serviço de autorização do NPS.
Função de retorno de chamada RadiusExtensionProcess2
As DLLs de extensão NPS também podem exportar RadiusExtensionProcess2 em vez de RadiusExtensionProcess e RadiusExtensionProcessEx. Essa função permite que a DLL adicione, modifique e remova atributos de e para a solicitação ou resposta de autenticação.
As mesmas informações descritas na seção Função de retorno de chamada RadiusExtensionProcessEx se aplicam à função RadiusExtensionProcess2 , com as seguintes exceções:
- Em uma DLL de Autorização, RadiusExtensionProcess2 recebe os atributos gerados pelo serviço de autorização do NPS e os atributos gerados de DLLs de autorização anteriormente chamadas.
- RadiusExtensionProcess2 não tem um parâmetro pfAction . RadiusExtensionProcess2 define a disposição final da solicitação usando a função SetResponseType fornecida na estrutura RADIUS_EXTENSION_CONTROL_BLOCK .
- O NPS sempre chama a função RadiusExtensionProcess2 em todas as DLLs restantes, independentemente de as funções nas DLLs anteriores retornarem Accept.
Tópicos relacionados