Livelli di rappresentazione
Se la rappresentazione ha esito positivo, significa che il client ha accettato di lasciare che il server sia il client in qualche modo. I diversi gradi di rappresentazione vengono chiamati livelli di rappresentazione e indicano la quantità di autorità assegnata al server quando rappresenta il client.
Attualmente sono disponibili quattro livelli di rappresentazione: anonimo, identificazione, rappresentazione e delegato. L'elenco seguente descrive brevemente ogni livello di rappresentazione:
-
anonymous (RPC_C_IMP_LEVEL_ANONYMOUS)
-
Il client è anonimo per il server. Il processo server può rappresentare il client, ma il token di rappresentazione non contiene informazioni sul client. Questo livello è supportato solo per il trasporto di comunicazione interprocesso locale. Tutti gli altri trasporti promuovono automaticamente questo livello per identificare.
-
identificare (RPC_C_IMP_LEVEL_IDENTIFY)
-
Livello predefinito del sistema. Il server può ottenere l'identità del client e il server può rappresentare il client per eseguire controlli ACL.
-
rappresentazione (RPC_C_IMP_LEVEL_IMPERSONATE)
-
Il server può rappresentare il contesto di sicurezza del client mentre agisce per conto del client. Il server può accedere alle risorse locali come client. Se il server è locale, può accedere alle risorse di rete come client. Se il server è remoto, può accedere solo alle risorse presenti nello stesso computer del server.
-
delegato (RPC_C_IMP_LEVEL_DELEGATE)
-
Livello di rappresentazione più potente. Quando si seleziona questo livello, il server, sia locale che remoto, può rappresentare il contesto di sicurezza del client quando agisce per conto del client. Durante la rappresentazione, le credenziali del client (sia locali che di rete) possono essere passate a un numero qualsiasi di computer.
Affinché la rappresentazione funzioni a livello di delegato, è necessario soddisfare i requisiti seguenti:
- Il client deve impostare il livello di rappresentazione su RPC_C_IMP_LEVEL_DELEGATE.
- L'account client non deve essere contrassegnato come "L'account è sensibile e non può essere delegato" nel servizio Active Directory.
- L'account server deve essere contrassegnato con l'attributo "Trusted for delegation" nel servizio Active Directory.
- I computer che ospitano il client, il server e tutti i server "downstream" devono essere tutti in esecuzione in un dominio.
Scegliendo il livello di rappresentazione, il client indica al server quanto può andare nella rappresentazione del client. Il client imposta il livello di rappresentazione sul proxy usato per comunicare con il server.
Impostazione del livello di rappresentazione
Esistono due modi per impostare il livello di rappresentazione:
- Il client può impostarlo a livello di processo, tramite una chiamata a CoInitializeSecurity.
- Un client può impostare la sicurezza a livello di proxy su un'interfaccia di un oggetto remoto tramite una chiamata a IClientSecurity::SetBlanket (o la funzione helper CoSetProxyBlanket).
Per impostare il livello di rappresentazione, passare un valore RPC_C_IMP_LEVEL_xxx appropriato a CoInitializeSecurity o CoSetProxyBlanket tramite il parametro dwImpLevel.
Diversi servizi di autenticazione supportano la rappresentazione a livello di delegato in extent diversi. Ad esempio, NTLMSSP supporta la rappresentazione a livello di delegato tra thread e tra processi, ma non tra computer. D'altra parte, il protocollo Kerberos supporta la rappresentazione a livello di delegato attraverso i limiti del computer, mentre Schannel non supporta alcuna rappresentazione a livello di delegato. Se si dispone di un proxy a livello di rappresentazione e si vuole impostare il livello di rappresentazione su delegato, è necessario chiamare SetBlanket usando le costanti predefinite per ogni parametro ad eccezione del livello di rappresentazione. COM sceglierà NTLM in locale e il protocollo Kerberos in modalità remota (quando funzionerà il protocollo Kerberos).
Argomenti correlati