2010-04-09 10 views
15

J'ai un service WCF qui aimerait supporter basicHttpBinding et webHttpBinding. Lorsque le client se connectera avec succès, le serveur générera un jeton que le client transmettra au serveur sur toutes les requêtes faites plus tard. La question est comment le client peut passer le jeton au serveur? Je ne veux pas ajouter un paramètre supplémentaire sur chaque méthode Web pour contenir le jeton.WCF comment passer le jeton pour l'authentification?

Répondre

17

Typiquement, la meilleure façon de faire quelque chose comme ceci est de passer de telles "méta-informations" dans un en-tête WCF. Vous pouvez facilement créer un inspecteur de message pour étendre WCF (ce n'est vraiment pas si effrayant et difficile à faire!) Qui injecterait le jeton dans chaque requête sortante du client, et le récupèrerait de l'en-tête et le validerait côté serveur.

Il y a un certain nombre de très bon blog là-bas vous montrant comment créer un inspecteur de message:

Vérifiez la deux interfaces pertinentes à implémenter:

  • IClientMessageInspector du côté client, qui a un message BeforeSendRequest et AfterReceiveReply à mettre en œuvre
  • IDispatchMessageInspector sur le côté serveur, qui a une méthode AfterReceiveRequest et BeforeSendReply pour mettre en œuvre
+0

Merci, il travaille. C'est exactement ce dont j'avais besoin. – Kevin

+0

Passer un jeton dans l'en-tête ne pose pas de problème de sécurité? –

+0

@Learning Je sais que c'est un vieux commentaire, mais vous devriez au moins utiliser une connexion sécurisée et c'est une bonne idée d'appliquer une sorte de cryptage pour le jeton que vous seuls et le client savez implémenter. – Silvermind