2008-12-15 9 views
1

Dans un environnement multiserveur, les utilisateurs pourront utiliser une page pour mettre, mettre à jour ou supprimer des fichiers sur les serveurs. J'envisageais d'utiliser un webservice (sur chaque serveur) appelé par le thread IIS pour faire ce travail (avec une page de gestion aspx).Comment authentifier efficacement l'utilisateur appelant un webservice?

Cependant, pour des raisons évidentes, je ne veux vraiment pas que quelqu'un puisse appeler ce service Web (en POSTANT une requête bien formée de leurs machines).

Je me demande quelle serait la manière la plus efficace (en termes de complexité, d'évolutivité) de s'assurer que l'accès au webservice est limité à ma page (token? Envoyer le principal de l'utilisateur? Je n'ai pas accès à leur mot de passe, l'envoi du couple login/mot de passe est hors de question)

+0

Est-ce interne ou externe? – JFV

+0

Tous les serveurs vont-ils à un service Web centralisé? –

Répondre

0

Vous devriez être en mesure d'obtenir l'utilisateur qui est d'appeler le service Web en obtenant l'objet IPrinciple stocké à:

IPrinciple _currentUser = HttpContext.Current.User; 

Une fois que vous obtenez l'utilisateur actuel, vous devriez être en mesure de faire votre validation ou pas que l'utilisateur ait les autorisations pour faire n'importe quelle action qu'il tente de faire en vérifiant si l'utilisateur est dans le rôle approprié, ou tout autre moyen que vous avez configuré pour vérifier les permissions.

+0

Al qui vous donnera est l'utilisateur anonyme. –

+0

Si l'utilisateur a été authentifié pour accéder à la page avec l'interface utilisateur pour effectuer les actions répertoriées, vous devez obtenir cet utilisateur authentifié. –

1

Vous pouvez associer un hachage SHA1 à l'adresse IP pour chaque requête entrante générée par la combinaison du navigateur (par exemple MSIE6.0 ou FireFox3), Adresse IP, nom d'utilisateur (si possible) et/ou le temps, et stocker dans un DB (sqlite peut-être) avec un temps d'expiration qui convient pour laisser le téléchargement de fichiers/transfert complet (disons 1 heure). Donc, pour chaque demande, vous pouvez vérifier le hachage associé à l'adresse IP.

Si par page vous voulez dire par un navigateur, alors je suggère d'utiliser un cookie pour transférer le hachage.

Remarque: Je dis hachage SHA1 car ses 160 bits de long (40 octets). Donc, les collisions ne sont pas faciles à trouver, surtout si vous utilisez le temps en combinaison avec quelque chose d'unique à l'utilisateur pour générer un résumé.

Je travaille sur C++ donc j'ai implémenté une fonctionnalité similaire dans une application CGI.

Questions connexes