Compartilhar via


Níveis de representação

Se a representação for bem-sucedida, isso significa que o cliente concordou em deixar o servidor ser o cliente até certo ponto. Os diferentes graus de representação são chamados níveis de representaçãoe indicam quanta autoridade é dada ao servidor quando ele representa o cliente.

Atualmente, há quatro níveis de representação: anônimo, identificar, representare delegado. 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. Esse nível só tem suporte no transporte de comunicação entre processos locais. Todos os outros transportes promovem silenciosamente esse nível para identificar.

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.

representação (RPC_C_IMP_LEVEL_IMPERSONATE)

O servidor pode representar o contexto de segurança do cliente enquanto atua em nome do cliente. O servidor pode acessar recursos locais como o cliente. Se o servidor for local, ele poderá acessar recursos de rede como o cliente. Se o servidor for remoto, ele poderá acessar apenas os 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 (local ou remoto) pode representar o contexto de segurança do cliente ao agir 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 do 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 cliente não deve ser marcada como "A conta é confidencial e não pode ser delegada" no Serviço do Active Directory.
  • A conta do servidor deve ser marcada com o atributo "Confiável para delegação" no Serviço do Active Directory.
  • Os computadores que hospedam o cliente, o servidor e todos os servidores "downstream" devem estar todos 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 usado 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 defini-lo em todo o processo por meio 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).

Defina o nível de representação passando um valor de RPC_C_IMP_LEVEL_xxx apropriado para CoInitializeSecurity ou CoSetProxyBlanket por meio do parâmetro dwImpLevel.

Diferentes serviços de autenticação dão suporte à representação no nível do delegado em diferentes extensões. Por exemplo, o NTLMSSP dá suporte à representação entre threads e de nível de delegado entre processos, mas não entre computadores. Por outro lado, o protocolo Kerberos dá suporte à representação no nível do delegado entre os limites do computador, enquanto o Schannel não dá suporte a nenhuma representação no nível do delegado. Se você tiver um proxy no nível de representação e quiser definir o nível de representação para delegar, chame SetBlanket usando as constantes padrão para cada parâmetro, exceto o nível de representação. O COM escolherá o NTLM localmente e o protocolo Kerberos remotamente (quando o protocolo Kerberos funcionará).

delegação e representação