Question

J'utilise quelque chose comme ceci sur mon serveur:

TcpServerChannel channel = new TcpServerChannel(settings.RemotingPort);
ChannelServices.RegisterChannel(channel, true);
RemotingServices.Marshal(myRemoteObject, "myRemoteObject");

Je souhaite m'abonner à un type d'événement afin que, chaque fois qu'un client distant se connecte à myRemoteObject, je puisse vérifier le Thread.CurrentPrincipal.Identity.Name pour décider s'il doit ou non l'autoriser.

Actuellement, je suis en train d'effectuer le contrôle d'autorisation dans chaque méthode distante exposée de myRemoteObject, ce qui est désordonné ...

Était-ce utile?

La solution

Dans mon application de communication à distance, j'ai défini un objet / une interface spéciale sur laquelle les clients doivent d'abord autoriser. L'objet spécial est ensuite renvoyé si le client a autorisé l'objet distant. Donc, vous avez l'autorisation à un endroit.

Cela ressemble à quelque chose comme ça.

public interface IPortal
{
  object SignIn(string name, string password);
}

public class Portal : MarshalByRefObject, IPortal
{
  private object _remoteObject;

  public Portal() {
    _remoteObject = new RemoteObject();
  }

  public object SignIn(string name, string password) 
  {
    // Authorization
    // return your remote object

    return _remoteObject;
  }
}

Dans votre application, vous hébergez l'objet Portal-Object

TcpServerChannel channel = new TcpServerChannel(settings.RemotingPort);
ChannelServices.RegisterChannel(channel, true);
Portal portal = new Portal()
RemotingServices.Marshal(portal , "portal");

Autres conseils

Vous pouvez utiliser quelque chose comme PostSharp pour factoriser le contrôle de chaque méthode - il suffit de le faire dans le Conseil AOP. (Vous l’appliquez à la classe qui expose ses méthodes et non à la connexion client.)

Cette approche est indépendante du type de transport que vous utilisez pour la communication à distance. Elle ne fait que dissiper le problème transversal de l'autorisation dans toutes les méthodes de votre classe distante.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top