Níveis de representação
Se a representação for bem-sucedida, significa que o cliente concordou em deixar o servidor ser o cliente em algum grau. Os vários graus de representação são chamados de níveis de representação , e indicam quanta autoridade é dada ao servidor quando ele está se passando pelo cliente.
Atualmente, existem quatro níveis de falsificação de identidade: anónima, identificam, se fazem passar pore delegam . A lista a seguir descreve brevemente cada nível de representação:
-
Anónimo (RPC_C_IMP_LEVEL_ANONYMOUS)
-
O cliente é anônimo para o servidor. O processo do servidor pode representar o cliente, mas o token de representação não contém nenhuma informação sobre o cliente. Este nível só é suportado no transporte de comunicação entre processos local. Todos os outros transportes promovem silenciosamente este nível de identificação.
-
identificar (RPC_C_IMP_LEVEL_IDENTIFY)
-
O nível padrão do sistema. O servidor pode obter a identidade do cliente e o servidor pode representar o cliente para fazer verificações de ACL.
-
personificar (RPC_C_IMP_LEVEL_IMPERSONATE)
-
O servidor pode representar o contexto de segurança do cliente enquanto age em nome do cliente. O servidor pode acessar recursos locais como o cliente. Se o servidor for local, ele pode acessar recursos de rede como o cliente. Se o servidor for remoto, ele poderá acessar apenas recursos que estão no mesmo computador que o servidor.
-
delegado (RPC_C_IMP_LEVEL_DELEGATE)
-
O nível de representação mais poderoso. Quando esse nível é selecionado, o servidor (seja local ou remoto) pode representar o contexto de segurança do cliente enquanto age em nome do cliente. Durante a representação, as credenciais do cliente (local e de rede) podem ser passadas para qualquer número de computadores.
Para que a representação funcione no nível de delegado, os seguintes requisitos devem ser atendidos:
- O cliente deve definir o nível de representação como RPC_C_IMP_LEVEL_DELEGATE.
- A conta de cliente não deve ser marcada como "A conta é confidencial e não pode ser delegada" no Serviço Ative Directory.
- A conta do servidor deve ser marcada com o atributo "Confiável para delegação" no Serviço Ative Directory.
- Os computadores que hospedam o cliente, o servidor e quaisquer servidores "downstream" devem estar em execução em um domínio.
Ao escolher o nível de representação, o cliente informa ao servidor até onde ele pode ir ao representar o cliente. O cliente define o nível de representação no proxy que usa para se comunicar com o servidor.
Definindo o nível de representação
Há duas maneiras de definir o nível de representação:
- O cliente pode configurá-lo em todo o processo, através de uma chamada para CoInitializeSecurity.
- Um cliente pode definir a segurança em nível de proxy em uma interface de um objeto remoto por meio de uma chamada para IClientSecurity::SetBlanket (ou a função auxiliar CoSetProxyBlanket).
Você define o nível de representação passando um valor de RPC_C_IMP_LEVEL_xxx apropriado para CoInitializeSecurity ou CoSetProxyBlanket através do parâmetro dwImpLevel.
Diferentes serviços de autenticação oferecem suporte à representação em nível de delegação em diferentes graus. Por exemplo, o NTLMSSP suporta representação em nível de delegado entre threads e processos cruzados, mas não entre computadores. Por outro lado, o protocolo Kerberos suporta representação de nível delegado através dos limites do computador, enquanto o Schannel não suporta nenhuma representação no nível de delegado. Se você tiver um proxy no nível de representação e quiser definir o nível de representação como delegado, deverá chamar SetBlanket usando as constantes padrão para cada parâmetro, exceto o nível de representação. A COM escolherá NTLM localmente e o protocolo Kerberos remotamente (quando o protocolo Kerberos funcionará).
Tópicos relacionados