2009-09-23 5 views
1

J'ai créé un service web que je veux sécuriser en utilisant l'authentification par formulaire. J'ai ajouté le code suivant:Connexion sécurisée à l'aide de FormsAuthentication dans .net webservice, ou est-ce?

[WebMethod(Description = "Login function returns true for success and false for fail.", EnableSession = true)] 
    public bool Login(string Username, string Password) 
    {    
     return User.Validate(Username, Password);   
    } 

Ma fonction User.Validate fait tout l'authentification et fonctionne très bien mais je ne suis pas sûr si elle est sécurisée qui passe le nom d'utilisateur et mot de passe au service Web. Est-ce moins sécurisé que si un champ nom d'utilisateur et mot de passe est soumis via un formulaire Web normal sans SSL?

Répondre

1

Votre méthode Web n'est pas moins sécurisée qu'une forme Web normale sans SSL. Les deux sont des entrées POST de base (vous pourriez les rendre GET, mais POST est le plus probable) qui envoient leur contenu de charge utile (nom d'utilisateur, mot de passe) en texte clair. Juste un commentaire: pas certain de votre stratégie de rendre votre service Web plus sûr en ajoutant une méthode d'authentification qui renvoie un simple booléen. La plupart des schémas d'authentification nécessiteront l'utilisation d'un jeton de session ou d'authentification qui doit être transporté par le client. Dans un navigateur Web, ceci est automatique à travers les cookies et autres; cela nécessite une gestion active pour la plupart des clients qui consomment un service Web.

+0

Merci c'est à peu près ce que je pensais. Tout devrait utiliser ssl si je ne veux pas l'envoyer en texte clair. BTW Le webservice doit être utilisé par une application flash. Le retour booléen est juste pour le faire savoir si l'utilisateur a été validé. le reste des méthodes vérifie ensuite IsAuthenticated avant de retourner quoi que ce soit. – Mike

0

Cela dépend de qui vous devez faire confiance. Client, Transport et/ou Serveur.

  • Le client a besoin de connaître le mot de passe pour entrer, donc pas un réel problème.
  • Le transport peut (et devrait) être crypté en utilisant HTTPS - HTTP n'est pas bon.
  • Serveur - faites-vous confiance aux personnes qui exécutent le serveur? Les utilisateurs utiliseront-ils le même mot de passe sur le serveur que dans leur société (en donnant au propriétaire du serveur le mot de passe possible pour tenter d'attaquer votre compte d'entreprise)?

    Une bonne vérification de la sécurité du serveur est si vous offrez une page de changement de mot de passe ou non. Tout site Web qui permet à l'utilisateur de changer le mot de passe, enverra le mot de passe sur la ligne et il sera disponible en texte clair sur le serveur (peut être crypté sur le chemin). Cela pourrait être évité, mais je n'ai pas encore trouvé un site qui le fait.

    Cheers,

3

Est-ce pas moins sûr que quand un nom d'utilisateur et Mot de passe sont soumis par un formulaire Web normale sans SSL?

C'est damnation avec des éloges faibles. Soumettre un mot de passe sans SSL vraiment n'est pas sécurisé.

Quoi qu'il en soit, il semble que ce pourrait être une bonne idée de start with the basics. Cet article répond-il à ce que je pense être votre vraie question ("Comment dois-je faire cela correctement?")?

0

Eh bien, le mot de passe n'est pas sécurisé si SSL n'est pas utilisé. En outre, si le service expose plusieurs méthodes, l'utilisateur doit entrer le nom d'utilisateur et le mot de passe pour chaque appel de méthode ou l'application appelante doit conserver ces informations à un endroit donné et entraîner d'autres vulnérabilités.

Pour éviter tous ces problèmes et l'un des meilleurs moyens de sécuriser un service est d'utiliser quelque chose de similaire au OAuth protocol. Ce protocole échange le mot de passe du nom d'utilisateur pour le jeton de requête, puis échange ce jeton de demande pour le jeton d'accès.Les appels suivants au service Web utiliseront le jeton d'accès et non le mot de passe du nom d'utilisateur.

Questions connexes