IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Services Web Discussion :

Question sur le style d'architecture pour mettre en place l'authentification en WCF/REST


Sujet :

Services Web

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Points : 27
    Points
    27
    Par défaut Question sur le style d'architecture pour mettre en place l'authentification en WCF/REST
    Bonjour,

    Je développe actuellement un service web en WCF/REST. J'utilise dotNet 4.0 et WebServiceHost2 fournit dans le Starter Kit de Microsoft.

    J'ai plusieurs [OperationContract] mais toutes ces méthodes nécessitent une authentification de l'utilisateur. Ces méthodes renvoyent différents types sérialisés [DataContract] suivant les besoins.

    J'exécute actuellement la méthode ValidateAuthentication() dans le constructeur du service WCF et j'ai défini une exception en créant une classe "Status" que j'envoi via la classe WebProtocolException.

    Problème:

    Toujours dans le constructeur, je voudrais maintenant pouvoir renvoyer le type que s'attend à recevoir le client. Ce type contiendra aussi un objet sérialisé de type "Status". Mais je ne sais pas comment récupérer le type de retour de la méthode avant que le service rentre dans la méthode.
    Pourquoi cette idée ? Parce que j'ai pas vraiment envie d'exécuter la méthode d'authentification à chaque fois que je crée un nouveau [OperationContract], de peur d'oublier cette ligne, ce qui résultera par une GROSSE FAILLE DE SECURITÉ !


    J'ai utilisé la classe abstraite RequestInterceptor pour intercépter la requête mais je ne vois pas comment récupérer le type de retour avant que le programme n'atteigne la méthode en question.

    Auriez-vous une solution au problème suivant ? Est-ce une bonne approche ? Car ce n'est visiblement pas trivial de mettre en place un système d'authentification des usagers en suivant la philosophie REST.

    Merci par avance,
    Cyrill

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Points : 27
    Points
    27
    Par défaut Problème résolu
    J'ai changé ma manière de voir les choses...
    Au lieu de vouloir intégrer un objet "Status" dans tous mes [Datacontract], j'ai créé un objet commun à tous les [OperationContract] qui contient l'objet "status" et un objet "Payload" qui encapsule l'objet désiré par le client, correspondant à la requête.

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    Bonjour,

    Je suis actuellement en train d'étudier un système d'authentification similaire à ce que tu cherchais à effectuer.

    mais je ne comprends pas ce que tu veux dire par créer un object commun à tous les [operationcontract], une opération contract, c'est des paramètres en entrées, et des paramètres en sorties...

    Tu pourrais me préciser un peu mieux les choses s'il te plait?

    Merci de ton aide.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 29
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    J'ai mis en place l'authentification de la manière suivante:

    -->L'application cliente se connecte en SSL et doit injecter dans chacune de ses requêtes un identifiant de connexion dans le "header". Pour chaque ressource (operation contract), l'identifiant est lu et interprété dans le service Web. Si l'identifiant est incorrect, je retourne l'erreur 407 avec un objet sérialisé "Status" contenant l'erreur. Dans le cas où la requête a fonctionné, l'objet sérialisé contient en plus l'objet intéressant pour le client.
    <MYOBJECT1>
    <STATUS>
    </STATUS>
    <OBJECT1>
    </OBJECT1>
    </MYOBJECT1>

    -->Pour ce qui est de la création de ressources (par exemple, la création d'une session usager), j'utilise une ressource particulière qui permet à l'utilisateur de créer une session en fonction de plusieurs paramètres (via le verbe POST dans le "BODY" du message). Le retour de cette ressource contient le sessionId qui devra être injecté par le client pour toute autre requête.

    -->La suppression d'une ressource se fait également avec l'aide d'une ressource particulière qui vient détruire la session (via le verbe DELETE)

    N'hésitez pas si vous avez d'autres questions.

    Bon courage,
    Cyrill

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question sur les choix des logiciels pour un MMORPG (sérieux)
    Par Sinnax dans le forum Développement 2D, 3D et Jeux
    Réponses: 11
    Dernier message: 06/01/2011, 20h53
  2. Question sur la résolution d'écran pour iPhone
    Par cprdev dans le forum Développement iOS
    Réponses: 1
    Dernier message: 15/12/2010, 20h32
  3. Réponses: 0
    Dernier message: 21/06/2009, 22h06
  4. Réponses: 4
    Dernier message: 10/04/2007, 18h59
  5. Question sur exports et les classes (pour une dll)
    Par DjPoke dans le forum Langage
    Réponses: 7
    Dernier message: 08/08/2005, 19h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo