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.
Tópicos relacionados
-
Role-Based de Administração de Segurança