2010-01-08 4 views
1

J'essaie de mettre en place un service web (pour l'instant) vraiment simple. Par simple, je veux dire qu'il n'a qu'une petite quantité de travail réel à faire du côté du code. Il n'a vraiment qu'une seule méthode/fonction: le client envoie un login utilisateur, et le service répond avec un détail par ailleurs très sécurisé sur l'utilisateur (pour les besoins de cette question, disons l'anniversaire de l'utilisateur).méthodes basées sur les rôles pour un service Web?

J'ai beaucoup de questions, mais pour l'instant je me demande:

Je considère avoir deux versions de cette méthode. Dans la version un, le client peut seulement faire une demande générique sans information de variable. Le service répondra avec l'anniversaire de celui qui est authentifié dans la session du client. Dans la version deux, le client est autorisé à interroger n'importe quel nom d'utilisateur (donc vraiment, tout ce qu'ils veulent) et revenir soit l'anniversaire ou "Rien trouvé", etc

L'application de l'offre à la fois serait que la plupart des développeurs obtiendrait la date de naissance de l'utilisateur actuel afin qu'il puisse être appliqué à cette session. Pour étendre mon exemple: Un utilisateur se connecte, le développeur veut pouvoir avoir "Happy Birthday" s'il est applicable. Les propriétaires du service/données ne veulent pas que le client du développeur ait un accès, réel ou conceptuel, à quoi que ce soit à propos de l'utilisateur, même s'il se connecte, il veut simplement répondre à l'objectif du développeur, car c'est vraiment sympa. Le développeur ne veut pas être responsable d'avoir potentiellement accès à quoi que ce soit, il veut juste être gentil.

La deuxième version est disponible pour certains groupes de support utilisateur. Ils ont en fait besoin de rechercher les dates de naissance des utilisateurs qui appellent afin qu'ils puissent confirmer que l'utilisateur est assez âgé pour, disons, louer une voiture. Ils peuvent même avoir à rechercher plusieurs utilisateurs pour voir qui est le plus éligible du groupe pour obtenir la meilleure offre.

Donc, je suppose que la grande question, enfin, est de savoir si ces deux méthodes peuvent exister dans le même service ou non? Le protocole, à ce stade, est plus susceptible d'être basé sur SOAP, puis RESTful, donc simplement avoir des URL qui à la fois résoudre le même service, mais simplement offrir des méthodes différentes n'est probablement pas une option. Ce dont j'ai besoin, idéalement, est un moyen de révéler les opérations dans le WSDL en fonction du rôle. Évidemment, la documentation fournie à l'un ou l'autre groupe refléterait uniquement l'opération appropriée pour le rôle, mais idéalement le développeur/client aurait) ne verrait aucune opération qu'ils ne devraient pas et b) recevrait le même type de réponse pour essayer d'utiliser une réponse interdite comme ils seraient un inexistant et c) plus idéalement, recevoir l'erreur mentionnée précédemment parce que pour leur rôle, l'opération n'existe pas vraiment, pas parce que le service a pris des précautions supplémentaires au cas où le client a essayé (ce qu'il fera, Pour info, mais je ne veux pas que ce soit le premier et le seul niveau d'obfuscation). Est-ce que je rêve le rêve impossible?

Addendum rapide

j'aurais été plus précis à ce sujet, je me rends compte. Quand je dis «basé sur les rôles», je fais référence aux comptes de service, pas aux comptes d'utilisateurs. Donc, dans ma situation hypothétique ci-dessus, l'application de service utilisateur qui aurait tout pour interroger n'importe quel ID utilisateur utiliserait un compte de service avec les privilèges pour ne pas vérifier le rôle de l'agent connecté à la session (ce qui serait fait pour arriver à l'application, évidemment, mais pas au service).

+0

+1. Très intéressant. – KB22

Répondre

0

Pourquoi ne pas avoir deux méthodes:

GetMyBirthday(); 

GetBirthday(string userName); 

Tout utilisateur peut appeler la première méthode; seuls les utilisateurs privilégiés peuvent appeler la deuxième méthode.Vous utilisez l'autorisation basée sur les rôles et rejetez les appels à la seconde méthode d'utilisateurs non autorisés.

Je ne vois pas pourquoi vous voudriez cacher des méthodes dans le WSDL en fonction des rôles. Dans de nombreux cas, vous accéderez au WSDL uniquement pour créer un proxy dans un environnement de développement et n'en aurez pas besoin lors de l'exécution.

+0

Je suppose que dans mon esprit j'essaie de cacher la méthode pour diminuer la tentation et la culpabilité. Je sais que quand je vois quelque chose de joli, je veux l'essayer, et quand je serai «interdit», je pense que je vais avoir des ennuis pour ma curiosité. De plus, ce service est à la traîne pour mon client depuis très longtemps, surtout parce que la sécurité était une préoccupation et je veux leur donner toutes les assurances imaginables. – Anthony

Questions connexes