Autenticazione con il canale HTTP
Per autenticare chiamate remote con il canale HttpChannel, l'oggetto remoto deve essere ospitato sotto IIS (Internet Information Services).
Configurazione del server
Ogni configurazione di autenticazione nel server viene fatta tramite IIS. Non ci sono impostazioni di configurazione del server relative all'autenticazione della classe HttpChannel. Per ulteriori informazioni su IIS e la configurazione di autenticazione, vedere Autenticazione IIS. La pagina potrebbe essere in inglese.
Configurazione del client
In caso di chiamata di un oggetto remoto ospitato sotto IIS e configurato per l'autenticazione, il client deve specificare le credenziali. Per inviare automaticamente le credenziali con cui l'applicazione client è in esecuzione, impostare la proprietà useDefaultCredentials su true:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.runtime.remoting>
<application>
<channels>
<channel ref="http" useDefaultCredentials="true"/>
</channels>
<client>
<wellknown
url="http://MyServer/IISSec/MyRemoteObj.rem"
type="Shared.MyRemoteObj, Shared"/>
</client>
</application>
</system.runtime.remoting>
</configuration>
Se si desidera specificare un insieme alternativo di credenziali, sarà possibile farlo a livello di codice come mostrato nel codice seguente:
MyRemoteObj obj = new MyRemoteObj();
// Get the current set of channel sink properties
IDictionary props = ChannelServices.GetChannelSinkProperties(obj);
// Set domain, username, and password properties
props["domain"] = "SomeDomain";
props["username"] = "SomeUser";
props["password"] = "SomePassword123";
Console.WriteLine(obj.SayHello());
In alternativa sarà possibile impostare a livello di codice la proprietà credentials, nella quale si specifica una classe che implementa l'interfaccia ICredentials. Creare una classe che implementi l'interfaccia ICredentials:
namespace MyCredentialsLib
{
public class MyCredentials : ICredentials
{
public NetworkCredential GetCredential(Uri uri, string authType)
{
Console.WriteLine("MyCredentials.GetCredential() called");
NetworkCredential newCred = new NetworkCredential("SomeRemotingUser", "SomePassword");
return newCred;
}
}
}
Nel client, quindi, sarà necessario creare un'istanza della classe che implementa ICredentials e impostare la proprietà credentials su quell'istanza come mostrato nel codice seguente:
RemotingConfiguration.Configure("client.exe.config", false);
MyRemoteObj obj = new MyRemoteObj();
IDictionary props = ChannelServices.GetChannelSinkProperties(obj);
MyCredentials credentials = new MyCredentials();
props["credentials"] = credentials;
Console.WriteLine(obj.SayHello());
Nota: |
---|
Non è mai una buona idea inserire le credenziali direttamente nel codice di un'applicazione. In questo caso è stato fatto solo a scopo illustrativo. |
La proprietà useAuthenticatedConnectionSharing indica che il canale server riutilizza connessioni autenticate piuttosto che autenticare ogni chiamata in ingresso. L'impostazione predefinita di questa proprietà è true quando la useDefaultCredentials è impostata su true. Questa proprietà può essere impostata in un file di configurazione (all'interno dell'elemento <channel>) o a livello di codice (esattamente come sono stati impostati username e password nell'esempio di codice mostrato in precedenza).
La proprietà unsafeAuthenticatedConnectionSharing indica che il client fornisce credenziali e nome del gruppo di connessioni che il server utilizza per creare un gruppo di connessioni autenticato. Se questa proprietà è impostata su true, la proprietà connectionGroupName deve essere impostata su un unico utente autenticato. La proprietà viene ignorata se il valore della proprietà useAuthenticatedConnectionSharing è impostato su true.
Vedere anche
Concetti
Autenticazione con il canale TCP
Autenticazione con il canale IPC
Crittografia e integrità dei messaggi
Copyright © 2007 Microsoft Corporation. Tutti i diritti riservati.