Compartilhar via


Representação e delegação do cliente

Em algumas circunstâncias, um aplicativo de servidor precisa apresentar a identidade de um cliente aos recursos que acessa em nome do cliente, geralmente para fazer com que as verificações de acesso ou a autenticação sejam executadas na identidade do cliente. Até certo ponto, o servidor pode agir sob a identidade do cliente, uma ação conhecida como representar o cliente.

Representação é a capacidade de um thread ser executado em um contexto de segurança diferente do processo que possui o thread. O thread do servidor usa um token de acesso que representa as credenciais do cliente e, com isso, pode acessar recursos que o cliente pode acessar.

O uso da representação garante que o servidor possa fazer exatamente o que o cliente pode fazer. O acesso aos recursos pode ser restrito ou expandido, dependendo do que o cliente tem permissão para fazer.

Você pode optar por ter um servidor representando um cliente ao se conectar a um banco de dados para que o banco de dados possa autenticar e autorizar o cliente para si mesmo. Ou, se o aplicativo acessar arquivos protegidos com um descritor de segurança e habilitar o cliente a obter acesso autorizado a informações nesses arquivos, o aplicativo poderá representar o cliente antes de acessar os arquivos.

Como implementar a representação

A representação requer a participação do cliente e do servidor (e, em alguns casos, dos administradores do sistema). O cliente deve indicar sua disposição de permitir que o servidor use sua identidade e o servidor deve assumir explicitamente a identidade do cliente programaticamente. Para obter detalhes, consulte os tópicos Client-Side requisitos para de representação e requisitos de Server-Side parade representação.

Requisitos administrativos para Delegate-Level representação

Para usar efetivamente a forma mais poderosa de representação, delegação, que é a representação de clientes pela rede, as contas de usuário do cliente e do servidor devem ser configuradas corretamente no Serviço do Active Directory para dar suporte a ela (além da autoridade de concessão do cliente para fazer a representação no nível do delegado), da seguinte maneira:

  • A identidade do servidor deve ser marcada como "Confiável para delegação" no Serviço do Active Directory.
  • A identidade do cliente não deve ser marcada como "A conta é confidencial e não pode ser delegada" no Serviço do Active Directory.

Esses recursos de configuração dão ao administrador de domínio um alto grau de controle sobre a delegação, o que é desejável, considerando a quantidade de confiança (e, portanto, o risco de segurança) envolvida. Para obter mais detalhes sobre delegação, consulte delegação e representação.

Camuflagem

Junto com a autoridade em que um cliente concede um servidor por meio do nível de representação, a funcionalidade de camuflagem do servidor determina em grande parte como a representação se comportará. O camuflagem afeta qual identidade é realmente apresentada pelo servidor quando ele faz chamadas em nome do cliente , sua própria ou do cliente. Para obter detalhes, consulte de Camuflagem.

Implicações de desempenho

A representação pode afetar significativamente o desempenho e o dimensionamento. Geralmente, é mais caro representar um cliente em uma chamada do que fazer a chamada diretamente. A seguir estão alguns dos problemas a serem considerados:

  • A sobrecarga computacional de passar a identidade em padrões complicados, especialmente se o manto dinâmico estiver habilitado.
  • A complexidade geral de impor a verificação de segurança redundante em vários lugares, em vez de apenas centralizar na camada intermediária.
  • Recursos como conexões de banco de dados, quando abertos representando um cliente, não podem ser reutilizados em vários clientes — um obstáculo muito grande para dimensionar bem.

Às vezes, a única solução eficaz para um problema é usar a representação, mas essa decisão deve ser cuidadosamente ponderada. Para obter uma discussão adicional sobre esses problemas, consulte de Segurança de Aplicativo de Várias Camadas.

Componentes enfileirados

componentes enfileirados não dão suporte à representação. Quando um cliente faz uma chamada para um objeto na fila, a chamada é realmente feita para o gravador, que o empacota como parte de uma mensagem para o servidor. Em seguida, o ouvinte lê a mensagem da fila e a passa para o player, que invoca o componente real do servidor e faz a mesma chamada de método. Assim, quando o servidor recebe a chamada, o token de cliente original não está disponível por meio de representação. No entanto, a segurança baseada em função ainda se aplica e a segurança programática usando a interfaceISecurityCallContextfuncionará. Para obter detalhes, consulte de segurança de componentes enfileirados.

de Autenticação de Cliente

de Segurança do Aplicativo da Biblioteca de

de segurança de aplicativo de várias camadas

de segurança de componente programático

Role-Based de Administração de Segurança

usando a política de restrição de software no COM+