Je suis en train d'implémenter un service WCF sécurisé. L'authentification est effectuée à l'aide du nom d'utilisateur/mot de passe ou des informations d'identification Windows. Le service est hébergé dans un processus de service Windows. Maintenant, j'essaie de trouver la meilleure façon d'implémenter autorisation pour chaque opération de service.Modèles d'autorisation de service WCF
Par exemple, considérons la méthode suivante:
public EntityInfo GetEntityInfo(string entityId);
Comme vous le savez, dans WCF, il y a un objet OperationContext à partir duquel vous pouvez récupérer les informations d'identification de sécurité transmise par l'appelant/client. Maintenant, l'authentification aurait déjà fini au moment où la première ligne de la méthode est appelée. Cependant, comment pouvons-nous mettre en œuvre l'autorisation si la décision dépend des données d'entrée elle-même? Par exemple, dans le cas ci-dessus, dites utilisateurs 'admin' (dont les permissions etc sont stockées dans une base de données), sont autorisés à obtenir des informations d'entité, et d'autres utilisateurs ne devraient pas être autorisés ... où mettons-nous les vérifications d'autorisation?
dire que nous l'avons mis dans la première ligne de la méthode comme ceci:
CheckAccessPermission(PermissionType.GetEntity, user, entityId) //user is pulled from the current OperationContext
Maintenant, il y a quelques questions:
Ne nous validons la entityID (par exemple vérifier valeur nulle/vide, etc.) AVANT le contrôle d'autorisation ou à l'intérieur du contrôle d'autorisation? En d'autres termes, si les contrôles d'autorisation doivent être inclus dans chaque méthode, est-ce un bon modèle? Quel devrait être le premier argument - validation ou autorisation?
Comment est-ce que nous testons un service WCF unitaire lorsque les vérifications d'autorisation sont partout comme ceci, et nous n'avons pas un OperationContext dans le test unitaire!? (En supposant que j'essaie de tester cette implémentation de classe de service directement sans aucune configuration de WCF).
Des idées les gars?
Merci Paul. Le problème avec l'autorisation d'abord, est le suivant: comment autoriser un utilisateur si nous devons vérifier les permissions en fonction des arguments d'entrée? Ne devons-nous pas d'abord valider ces arguments avant de l'utiliser pour l'autorisation? – Krishna
L'autorisation ne doit dépendre que de l'identité de l'utilisateur. Si cela dépend des arguments d'entrée, alors l'appelant peut envoyer toutes les valeurs dont il a besoin pour obtenir l'autorisation qu'il souhaite, de sorte que votre vérification d'autorisation perd toute signification. –
Non. Dites que je veux accéder à un objet avec l'ID 'abc1'. Je suis 'user1'. L'autorisation décide si 'l'utilisateur 1' peut accéder à l'objet 'abc1'. donc la première chose à faire sera de valider le paramètre qui contient la chaîne de l'id de l'objet! – Krishna