WCF Transférer des données de sécurité supplémentaires lors de tous les appels de service
-
07-07-2019 - |
Question
Côté client, je dois transmettre une information (pour cet exemple, disons une chaîne) à chaque appel de service que je passe. Les services utilisent cette chaîne (currentRole) avec les informations d'identification utilisateur / pass pour extraire le jeu de revendications d'un utilisateur associé à son rôle actuel.
Les solutions que j'ai trouvées jusqu'à présent sont les suivantes:
1) Modifiez les en-têtes de message au fur et à mesure qu'ils sortent du client et vérifiez que l'en-tête de message se trouve côté service.
2) Utilisez des informations d'identification personnalisées qui, d'après ce que j'ai compris, nécessitent également un jeton de sécurité personnalisé pour stocker la chaîne.
Y a-t-il d'autres approches que je ne vois pas, comme ajouter simplement cette information à un jeton / identifiant existant? Et y at-il des avantages / inconvénients des solutions mentionnées ci-dessus?
Merci.
La solution
Vous pouvez également écrire un comportement côté client qui ajouterait cet en-tête aux messages (pour ne pas avoir à penser à le faire vous-même dans votre code).
Vous pouvez implémenter un IClientMessageInspector
et, dans le remplacement de la méthode BeforeSendRequest
, ajouter un en-tête de message. Lorsque vous ajoutez ce comportement à chacun de vos points de terminaison client, il ajoute automatiquement cet en-tête à chaque message sortant.
Voir ce article de CodeProject pour quelques infos sur les démarreurs, et ce article de blog pour un savoir-faire plus approfondi.
Marc