2009-05-06 10 views
13

J'ai écrit un webservice .NET simple, que je serai hébergé sur un serveur différent peut être sur un continent différent. Je ne sais pas vraiment. Maintenant, je n'avais que son URL et j'ai essayé d'utiliser la méthode webrequest et webresponse pour accéder à ce service web via HTTP POST. Maintenant, je veux savoir est-il un moyen de sécuriser l'accès webservice, afin que personne ne peut l'exploiter?Comment sécuriser un webservice dans .net?

par exemple:

http://example.com/Verify/Verification.asmx/Verify?AccountNumber=3223&ProductName=876

Maintenant, ce sont tous les paramètres requis pour appeler cette webservice. Comme si maintenant, tout le monde peut l'exploiter. Alors, comment puis-je le sécuriser? Bien, je prévois d'obtenir SSL et tout cela se passe de serveur à serveur, pas de client à serveur?

+0

MERCI À TOUS .. CODAGE HEUREUX. – Mohit

Répondre

9

Vous pouvez passer une clé de service (comme Amazon WS) dans l'en-tête d'autorisation de la requête Web qui pourrait être chiffrée avec un algorithme de votre choix, qui est ensuite déchiffré à la fin du service et continuer uniquement si la clé correspond

Voir la section 14.8 dans l'URL suivante

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

+0

Merci, c'est logique. Y a-t-il autre chose que je pourrais faire pour le rendre plus sûr?Si la demande du client est faite en mode SSL alors, cette demande sera également faite en SSL du serveur au serveur, ou dois-je l'activer spécifiquement? Pardonnez-moi, pour avoir posé tant de questions. Merci. – Mohit

+1

Je crois que vous auriez besoin d'un certificat SSL pour la communication serveur-serveur également. Cette paire avec un en-tête d'autorisation crypté devrait être tout ce dont vous avez besoin –

1

Malheureusement, vous n'avez pas beaucoup d'options puisque vous avez utilisé l'ancienne technologie de service Web ASMX. Les seules façons d'authentifier quelqu'un avec des services Web ASMX, sur Internet, consistent essentiellement à «faire soi-même».

Si je devais le faire, j'utiliser WCF et me donner quelques options. Si je ne pouvais pas utiliser WCF, alors je créerais un en-tête HTTP personnalisé pour passer le nom d'utilisateur et le mot de passe (sur SSL!), Et les authentifierais sur le serveur. Alternativement, j'utiliserais des certificats sur le client et exigerais qu'ils soient envoyés au serveur. IIS peut même transformer les certificats clients en identités Windows sur le serveur.

+0

WCF ... Je pense que je peux y jeter un coup d'œil. Mais j'ai encore besoin d'accéder à cela via l'URL seulement, c'est ma limitation. S'il vous plaît aidez-moi si vous le pouvez. Tout lien serait suffisant. merci. – Mohit

+0

Le Centre de développement WCF sur MSDN est à http://msdn.microsoft.com/WCF/. WCF devrait être utilisé à la place d'ASMX pour tout nouveau développement de service Web. –

1

Généralement ce que vous avez utilisé pour sécuriser les services Web .NET avant WCF était Web Service Extensions (WSE) de Microsoft, maintenant à la version 3.0. Je l'ai utilisé avec succès dans un produit disponible dans le commerce, et il est plutôt bon car il est basé sur les normes W3C ws- *. Il est possible d'interopérer avec succès avec des clients .NET (évidemment) mais aussi avec des clients Java si vous utilisez Apache Axis. Télécharger sur:

http://www.microsoft.com/downloads/details.aspx?FamilyID=018a09fd-3a74-43c5-8ec1-8d789091255d&displaylang=en

+0

Je recommande fortement contre même _thinking_ à propos de WSE! WSE est assez obsolète, ayant été remplacé par WCF. N'utilisez pas WSE sauf si vous n'avez aucun choix. –

+3

C'est pourquoi j'ai écrit/avant/WCF ... La question originale semble se référer aux services web .NET traditionnels. Bien sûr, je recommanderais aussi la WCF s'il y a un choix. –

+0

Juste _please_ faites attention à mentionner WSE - et si quelqu'un lisant cela a décidé de l'utiliser? C'est pourquoi je le dis en termes si durs - "seulement si vous n'avez pas d'autre choix". Je ne veux pas risquer de l'utiliser parce que "il utilise des fichiers .ASMX" ou "WCF est trop avancé" ou quelque chose comme ça. WSE est obsolète, et ne devrait tout simplement pas être utilisé, du moins pas sur un projet qui compte. –

0

Nous un bon nombre de services Web et de les sécuriser, nous venons d'ajouter un nom d'utilisateur et mot de passe à notre objet de requête. Dans votre cas, vous pouvez simplement ajouter 2 nouveaux paramètres pour un nom d'utilisateur et un mot de passe, ou simplement en ajouter un et utiliser quelque chose comme un code d'authentification, que vous pouvez rendre aussi complexe ou aussi simple que vous le souhaitez. Certaines idées sont quelque chose de simple comme une liste de GUID qui sont des clés de passe acceptables pour un cryptage de l'adresse IP du serveur demandeur afin que le code d'authentification fonctionne uniquement avec cette adresse IP vérifiée par le service Web.

+0

Très gentil .. Merci pour la suggestion .. Mais comme d'autres l'ont dit, je vais essayer d'utiliser WCF aussi et voir si cela me profite. Sinon, je peux toujours utiliser votre suggestion. Merci. – Mohit

0

Vous pouvez également créer un jeton et de transmettre cette tokenid comme paramètre à chaque webmethod. Vous pouvez maintenir le jeton en hashtable et le retirer de la table de hachage une fois la session abandonnée.

Le jeton doit être généré lors de la connexion réussie. Pour générer un ID de jeton, je recommande d'utiliser RNGCryptoServiceProvider.

+0

vous avez dit: Vous pouvez également créer un jeton et transmettre ce tokenid en tant que paramètre à chaque méthode web. si je suis votre ligne de guide pour passer le jeton avec chaque demande, alors comment puis-je empêcher la réponse attachée. L'attaquant saisit également ces jetons et envoie la demande. guide-moi. Merci – Mou

Questions connexes