2009-04-17 7 views
2

Je suis occupé à concevoir une application WCF. L'objectif de l'application sera de donner aux membres d'assurance l'accès à leurs informations d'assurance via le web. Le problème réside dans notre architecture réseau et je ne sais pas exactement quel type ou quelle combinaison de sécurité je dois utiliser.WCF Architecture

Dans notre réseau interne, nous avons un environnement UNIX auquel j'accède en utilisant l'encapsuleur EntireX .net et nous avons un magasin de données Oracle 10g auquel j'accède via la bibliothèque Enterprise.

J'ai créé une liste de correctifs de base contenant les objets de gestion et une liste d'accès client qui remplit ces objets via Enterprise Library/EntireX.

J'ai créé une couche de services WCF avec 2 services WCF, l'un pour accéder au magasin Oracle et l'autre pour accéder à Unix et ils font référence à la BLL.

Je vais héberger ce service dans IIS sur un serveur de production avec SQL 2005 à l'intérieur du pare-feu. Nous avons acheté un serveur web pour lequel nous créons des DMZ et ce serveur web ne communiquera avec le serveur de production que via le port 443 et/ou le port 80. Notre société internet aura accès au serveur web dans la zone démilitarisée.

La couche de présentation sera un frontal ASP.Net qui appelle le service en code à l'aide d'un Channelfactory. J'utilise des certificats client X509 que le client doit présenter au service. Le service est sécurisé par SSL. L'extrémité avant sera sur le serveur Web dans la zone démilitarisée. J'utilise wsHttpBinding avec la sécurité de transport et clientCredentialType = "Certificate", qui fonctionne correctement, mais je souhaite transmettre les informations de connexion au service. J'ai pensé à l'ajouter à l'en-tête du message.

Maintenant, je suis à un stade où je doute de la viabilité de mon design. Quelqu'un peut-il me donner quelques conseils sur la liaison et la sécurité que je dois utiliser dans ce scénario, comment transmettre les informations de connexion et ce que je dois avoir dans ma couche de présentation pour être le plus sécurisé. Nous contrôlons les ports qui seront ouverts via le pare-feu vers le serveur de production interne. Nous aurons seulement 1 client ASP.Net hébergé sur le serveur web dans la DMZ mais n'aurons qu'un accès HTTPS ou HTTP au serveur de production.

Merci beaucoup Ryan

Merci

+0

Lorsque vous dites "Je veux transmettre les informations de connexion au service", voulez-vous dire que vous voulez que l'identité de l'utilisateur soit disponible dans la couche services? – Dan

Répondre

1

Je pense que votre approche semble OK. Si vos services WCF ne seront utilisés que par votre application frontale asp.net, je penserais probablement à héberger la couche de service dans un service Windows et utiliser la liaison TCP (alors vous n'aurez plus à traiter avec IIS et éventuellement pas de certificats) . Mais cela pourrait vous obliger à modifier légèrement vos besoins en infrastructure (vous pouvez toujours utiliser le port 80/443 mais vous devrez faire face à d'autres problèmes gênants liés à l'utilisation des ports qu'IIS utilise normalement). Vous pouvez commencer avec la liaison IIS/HTTP et basculer plus tard de toute façon avec un impact minimal sur l'application globale (c'est la beauté de WCF).

En ce qui concerne les services eux-mêmes, je considérerais également publier une façade simple sur vos deux dépôts. De cette façon, votre client ne se couple pas aux concepts de votre système oracle db et unix. Cependant, ceci est discutable, vous avez seulement mentionné les technologies utilisées, si les deux systèmes représentent des domaines d'activité distincts, alors les garder séparés est logique. Si vous ne faites que les séparer parce qu'ils sont deux systèmes différents, j'essayerais de faire abstraction de ces systèmes à partir de l'interface utilisateur.

Pour passer des informations d'identification, je recommande d'utiliser une politique d'autorisation en combinaison avec les revendications. Pour plus d'aide sur ce sujet, consultez leastprivilege.com si vous ne l'avez pas déjà trouvé.Voici un article pour commencer