Autenticazione con il canale TCP
Questo argomento è specifico di una tecnologia legacy mantenuta per una questione di compatibilità con le applicazioni esistenti di versioni precedenti e non è consigliato per il nuovo sviluppo. Le applicazioni distribuite devono ora essere sviluppate utilizzando Windows Communication Foundation (WCF).
Il canale IPC supporta direttamente autenticazione e rappresentazione. Questo argomento descrive come configurare i canali client e server.
.NET Framework consente a server di oggetti remoti di autenticare e rappresentare chiamanti impostando le proprietà degli oggetti TcpServerChannel e TcpClientChannel associati.
Configurazione del server
Per configurare un canale TCP server per l'autenticazione dei chiamanti remoti, impostare la proprietà secure su true sul canale TCP come mostrato nel file di configurazione seguente.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" secure="true" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
Nota: |
---|
Anche la proprietà secure sul canale client deve essere impostata su true affinché si verifichi una comunicazione protetta. Per impostazione predefinita la comunicazione protetta include autenticazione e crittografia dei dati inviati fra server e client. |
Si può accedere all'identità del client autenticato ottenendo CurrentPrincipal e accedendo alla sua proprietà Identity. Si può accedere all'identità del client rappresentato tramite GetCurrent. È quindi possibile eseguire la propria autorizzazione, se necessario.
Per configurare un canale TCP server per l'autenticazione e la rappresentazione dei chiamanti remoti, impostare la proprietà secure e la proprietà impersonate su true come mostrato nel file di configurazione seguente.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" secure="true" impersonate="true" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
Nota: |
---|
Per assicurare la buona riuscita della rappresentazione, la proprietà tokenImpersonationLevel sul canale client deve essere impostata su impersonation o su delegation. Si noti che sul server la proprietà è chiamata impersonate ma sul client, si deve impostare tokenImpersonationLevel su impersonation. |
Nota: |
---|
Tutti i processi eseguiti sotto un account utente standard su Windows Vista. Gli utenti standard non possono rappresentare un account amministratore. Se un'applicazione remota deve rappresentare un account amministratore, quell'applicazione deve essere in esecuzione con privilegi elevati. |
La proprietà authorizationModule consente al server di eseguire la propria autorizzazione. Per utilizzare questa proprietà è necessario creare una classe che implementa IAuthorizeRemotingConnection. Per l'interfaccia sono disponibili i seguenti metodi:
IsConnectingEndpointAuthorized, che consente di autorizzare un client in base all'indirizzo IP.
IsConnectingIdentityAuthorized, che consente di autorizzare un client in base all'identità.
Nel file di configurazione del server si imposta la proprietà authorizationModule sulla classe che implementa IAuthorizeRemotingConnection in una stringa nel formato "namespace.class, assembly" come mostrato nel file di configurazione seguente.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application name="AuthorizationApp">
<service>
<wellknown mode="SingleCall"
type="Server.SampleService, Server"
objectUri="Server.rem"/>
</service>
<channels>
<channel ref="tcp" port="8001" secure="true" impersonate="true" authorizationModule="Server.AuthorizationModule,Server"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
Configurazione del client
Per configurare un canale TPC client per l'autenticazione di un chiamante, impostare la proprietà secure su true sul canale TCP come mostrato nel file di configurazione seguente.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" secure="true" />
</channels>
</application>
</system.runtime.remoting>
</configuration>
Nota: |
---|
Anche la proprietà secure sul canale server deve essere impostata su true affinché si verifichi una comunicazione protetta. Per impostazione predefinita, la comunicazione protetta include autenticazione e crittografia dei dati inviati fra server e client. |
Per configurare un canale TCP client per l'utilizzo della rappresentazione, impostare la proprietà secure su true e la proprietà tokenImpersonationLevel su impersonation come mostrato nel file di configurazione seguente.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" secure="true" tokenImpersonationLevel="impersonation"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
Nota: |
---|
Per assicurare la buona riuscita della rappresentazione, la proprietà impersonate sul canale server deve essere impostata su true. Si noti che sul server la proprietà è chiamata impersonate ma sul client, tokenImpersonationLevel è impostata su impersonation. |
Nota: |
---|
Tutti i processi eseguiti sotto un account utente standard su Windows Vista. Gli utenti standard non possono rappresentare un account amministratore. Se un'applicazione remota deve rappresentare un account amministratore, quell'applicazione deve essere in esecuzione con privilegi elevati. |
tokenImpersonationLevel può essere impostato su uno dei valori elencati nella tabella seguente.
Impostazione di tokenImpersonationLevel | Descrizione |
---|---|
Identificazione |
Il processo server può ottenere informazioni sul client, ad esempio ID di sicurezza e privilegi, ma non lo può rappresentare. |
Rappresentazione |
Il processo server può rappresentare il contesto di sicurezza del client nel sistema locale. Il server non può rappresentare il client nei sistemi remoti. |
Delega |
Il server può rappresentare il client nei sistemi remoti. |
Per impostazione predefinita, un canale client TCP si autentica con l'identità utente che sta eseguendo il processo client. È possibile specificare un'identità alternativa impostando domain, username e le proprietà password per specificare un'identità alternativa come illustrato nell'esempio di codice seguente.
RemotingConfiguration.Configure("Client.exe.config", true);
ISharedInterface remoteObject = (ISharedInterface)Activator.GetObject(
typeof(ISharedInterface),
"tcp://localhost:8001/server.rem");
// Set domain, username, and password
IDictionary props = ChannelServices.GetChannelSinkProperties(remoteObject);
props["domain"] = "SomeDomain"; // only required if the user is a member of a domain
props["username"] = "SomeRemotingUser";
props["password"] = "Password123";
// Call method on remote object
remoteObject.HelloWorld("Hi Server");
È inoltre possibile specificare in un file di configurazione le proprietà domain, username e password.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp"
secure="true"
tokenImpersonationLevel="impersonation"
username="SomeRemotingUser"
password="Password123"
/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
Nota: |
---|
Specificare nomi utenti e password a livello di codice non è consigliabile. In questo caso è stato fatto solo a scopo illustrativo. Il modo migliore di ottenere credenziali è di chiederle all'utente. |
Per impostazione predefinita il canale TCP utilizza NTLM per autenticare i chiamanti. Per costringere il canale a utilizzare Kerberos, impostare la proprietà servicePrincipalName sull'account che sta eseguendo il servizio come illustrato nel file di configurazione seguente.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="tcp" secure="true" tokenImpersonationLevel="impersonation"
servicePrincipalName="MyDomain\MyUserAccount"/>
</channels>
</application>
</system.runtime.remoting>
</configuration>
Nota: |
---|
Kerberos necessita dell'accesso a un server Active Directory. Se i computer che eseguono il codice non sono membri di un dominio Active Directory, utilizzare NTLM (l'impostazione predefinita). |
Vedere anche
Concetti
Crittografia e integrità dei messaggi
Autenticazione con il canale HTTP
Autenticazione con il canale IPC