Autenticación con el canal HTTP
Este tema es específico de una tecnología heredada que se mantiene para la compatibilidad con versiones anteriores con aplicaciones existentes y no se recomienda para nuevo desarrollo. Las aplicaciones distribuidas se deberían desarrollar utilizando Windows Communication Foundation (WCF).
Para autenticar las llamadas remotas con el canal HttpChannel, el objeto remoto se debe hospedar en Internet Information Services (IIS).
Configuración del servidor
Toda la configuración de autenticación del servidor se hace a través de IIS. No hay ningún valor de configuración del servidor relacionado con la autenticación para HttpChannel. Para obtener más información sobre IIS y la configuración de autenticación, vea Autenticación de IIS.
Configuración del cliente
Al llamar a un objeto remoto hospedado en IIS y configurado para la autenticación, el cliente debe especificar las credenciales. Para enviar automáticamente las credenciales bajo las que se está ejecutando la aplicación del cliente, establezca la propiedad useDefaultCredentials a 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>
Si desea especificar un conjunto alternativo de credenciales, puede hacerlo mediante programación como se muestra en el código siguiente:
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());
De forma alternativa, puede establecer mediante programación la propiedad credentials, en la que especifica una clase que implementa la interfaz ICredentials. Primero, cree una clase que implemente la interfaz 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;
}
}
}
Luego, en el cliente debe crear una instancia de la clase que implementa ICredentials y establece la propiedad credentials a esa instancia como se muestra en el código siguiente:
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: |
---|
No es una buena idea codificar las credenciales de forma rígida en una aplicación. Aquí solamente se hace por motivos ilustrativos. |
La propiedad useAuthenticatedConnectionSharing indica que el canal de servidor reutiliza las conexiones autenticadas en lugar de autenticar cada llamada entrante. Esta propiedad tiene como valor predeterminado true cuando useDefaultCredentials está establecido a true. Esta propiedad se puede establecer en un archivo de configuración (dentro del elemento <channel>) o mediante programación (exactamente de la misma forma que las propiedades password y username se establecieron en el código de muestra mostrado previamente).
La propiedad unsafeAuthenticatedConnectionSharing indica que el cliente se proporciona sus propias credenciales y el nombre de grupo de conexión que el servidor utiliza para crear un grupo de conexiones autenticado. Si esta propiedad está establecida a true, la propiedad connectionGroupName debe estar establecida a un usuario autenticado único. Esta propiedad se omite si la propiedad useAuthenticatedConnectionSharing está establecida a true.
Vea también
Conceptos
Autenticación con el canal TCP
Autenticación con el canal IPC
Cifrado e integridad de mensaje