Partilhar via


Inicialização do modo de usuário

Os aplicativos distribuídos (cliente/servidor) usam pacotes de segurança para obter conexões autenticadas e trocar mensagens. O aplicativo chama funções de interface do provedor de suporte de segurança (SSPI) que são mapeadas para funções implementadas por SSP/APse funções implementadas por SSP/APs de modo de usuário. Esse mapeamento é realizado pela DLL do provedor de segurança (Secur32.dll ou Security.dll), que pode ser carregada nos processos do cliente e do servidor dinamicamente. A DLL também pode ser vinculada estaticamente usando Secur32.lib. A DLL e a LIB são fornecidas com o Microsoft Windows Software Development Kit (SDK).

O carregamento do pacote de segurança no processo do cliente ou servidor é tratado pelo sistema, se a DLL SSP/AP que contém o pacote de segurança estiver devidamente registrada.

O servidor inicia o processo de obtenção de uma conexão segura com um cliente monitorando uma porta, aguardando que um cliente envie uma mensagem. O cliente inicia o processo de obtenção de uma conexão segura com o servidor chamando a função SSPI InitializeSecurityContext (Geral). Esta função é mapeada para a funçãoSpInitLsaModeContext do pacote de segurança personalizado. SpInitLsaModeContext retorna um token para o cliente, que o encaminha para o servidor.

Ao receber o token do cliente, o servidor chama a função SSPI AcceptSecurityContext (Geral), que é despachada para a funçãoSpAcceptLsaModeContext do pacote de segurança. Se a função SpAcceptLsaModeContext for bem-sucedida e não for necessário mais processamento para estabelecer o contexto de segurança, a função deverá retornar STATUS_SUCCESS ao chamador. Se for necessário processamento adicional, a função deve retornar SEC_I_CONTINUE_NEEDED e retornar um token para o servidor. O servidor encaminha o token para o cliente, que chama InitializeSecurityContext (Geral) novamente.

Esse ciclo de chamada pode ser repetido quantas vezes forem necessárias até que uma conexão autenticada seja estabelecida ou falhe. Durante esse processo, se o SpAcceptLsaModeContext ou função SpInitLsaModeContext for bem-sucedido e não for necessário mais processamento para estabelecer ode contexto de segurança, a função deverá retornar STATUS_SUCCESS ao chamador. Se for necessário processamento adicional, a função deve retornar SEC_I_CONTINUE_NEEDED e retornar um token para o chamador, que é responsável por encaminhá-lo.

O protocolo implementado pelo pacote de segurança determina o número de vezes que este ciclo é repetido. Por exemplo, em pacotes de segurança que suportam autenticação mútua de três pernas, a sequência de chamada é a seguinte:

  1. O cliente obtém um token chamando InitializeSecurityContext (Geral) e o envia para o servidor. O servidor chama AcceptSecurityContext (Geral) primeira vez e recebe de volta um token de resposta que envia ao cliente.
  2. O cliente usa o token recebido do servidor em uma segunda chamada para InitializeSecurityContext (General) e recebe de volta um token final. O cliente envia esse token para o servidor.
  3. O servidor recebe o token gerado na etapa 2 que ele usa na chamada final para AcceptSecurityContext (Geral).

Quando as funções SpAcceptLsaModeContext e SpInitLsaModeContext forem bem-sucedidas e não for necessário mais processamento para estabelecer o contexto de segurança, as funções deverão retornar STATUS_SUCCESS ao chamador. Além disso, se o pacote de segurança personalizado suportar as funções implementadas por SSP/APs de modo de usuário, SpAcceptLsaModeContext e SpInitLsaModeContext deverão retornar TRUE por meio do parâmetro MappedContext MappedContext. O valor MappedContext não é passado de volta para o aplicativo; é intercetado pela LSA.

Quando MappedContext é verdadeira, o LSA chama a funçãoSpUsermodeInitialize da DLL SSP/AP. Esta função fornece tabelas de ponteiros para as funções de modo de usuário implementadas por cada pacote de segurança. A função deSpInstanceInitde cada pacote é chamada, usando as tabelas de funções retornadas pelo SpUsermodeInitialize. SpInstanceInit recebe uma tabela de ponteiros para funções LSA chamadas por SSP/APs de modo de usuário.