Autenticação com o canal HTTP
Para autenticar chamadas remotas com o canal HttpChannel, o objeto remoto deve ser hospedado em Serviços de Informações da Internet (IIS).
Configuração do servidor
All configuração autenticação on the servidor is Através IIS. There are no Configuração de Servidor relacionado settings to autenticação for the HttpChannel. Para obter mais informações sobre o IIS e configurar autenticação, consulte a autenticação do IIS.
Configuração do cliente
Ao chamar um objeto remoto hospedados no IIS e configurado para autenticação, o cliente deve especificar credenciais. To automaticamente Send the credenciais is the aplicativo cliente Executando under, Set the propriedade useDefaultCredentials to 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 você desejar especificar um conjunto alternativo de credenciais, você pode fazer até programaticamente conforme mostrado no código a seguir:
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());
Como alternativa programaticamente você pode definir a propriedade credentials , na qual você especificar uma classe que implementa a interface ICredentials. First, Criar a classe that Implements the interface 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;
}
}
}
NEXT, in the cliente You Must Create an instância of the classe that Implements ICredentials and Set the propriedade credentials to that instância as shown in the seguinte Código:
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());
Dica
Nunca é uma boa idéia para credenciais rígido código em um aplicativo.It is aqui for purposes illustration only.
A propriedade useAuthenticatedConnectionSharing indica que o canal do servidor reutiliza conexões autenticadas em vez de autenticar cada chamada de entrada. This Propriedade Defaults to true when the useDefaultCredentials is set to true. Essa propriedade pode ser definida em um arquivo de configuração (dentro de < canal > Elemento) ou por meio de programação (exatamente da mesma maneira o username e password propriedades foram definidas no código de exemplo mostrado anteriormente).
A propriedade unsafeAuthenticatedConnectionSharing indica o cliente forneça suas próprias credenciais e conexão GRUPO nome que o servidor usa para Criar GRUPO uma conexão autenticada. If this is set to true, the connectionGroupName must be set to a Simples . Esta propriedade é ignorada se a propriedade useAuthenticatedConnectionSharing é definida como true.