2009-08-10 9 views
1

WCF a un modèle de sécurité riche, j'espère que tout le monde peut être d'accord sur ce point. Je suis récemment tombé sur une situation où nos applications client (applications basées sur WCF qui exploitent les informations d'identification de l'utilisateur dans le domaine) devaient communiquer avec les services que nous devions déployer vers un centre de données en dehors de notre domaine et de notre contrôle. Par conséquent, cela a brisé notre modèle d'authentification unique et j'aimerais savoir si l'un d'entre vous a réussi à étendre le modèle de sécurité à des services autres que le domaine. Notre modèle d'identité repose sur les classes IIdentity et IPrincipal (et non sur WindowsIdentity/WindowsPrincipal), donc l'utilisation d'une implémentation d'identité alternative est correcte. Comme ma question l'indique, je n'ai pas de réponse et j'espère que vous le ferez. La seule solution avec laquelle j'ai joué implique que le client s'authentifie dans notre domaine de la même manière que maintenant. Dans le cadre de l'authentification, ils recevraient un certificat X.509 signé par notre autorité de certification (qui serait approuvé par le centre de données). Les certificats seraient stockés dans un magasin de certificats (je crois qu'il y en a un qui est fourni avec .NET, mais je ne sais pas s'il peut être utilisé dans un environnement où les utilisateurs se déplacent occasionnellement) et créé/fourni à l'utilisateur.Quelle approche peut-on utiliser pour étendre la sécurité WCF au-delà du domaine actuel?

J'apprécierais tout commentaire et/ou idées.

Modifier:

Nous avons des services qui encore résident dans notre centre de données en plus du centre de données à distance. Je voudrais fournir une solution qui ne nécessite qu'un seul code d'accès (et fwiw, nos utilisateurs doivent entrer leur nom d'utilisateur et mot de passe chaque fois qu'ils lancent cette application).

Répondre

0

Si vous avez plus ou moins de demandes point à point entre quelques participants, comme dans un environnement B2B, alors les certificats sont définitivement la solution. Tout fonctionne automatiquement - une fois que vous avez tout réglé correctement, bien sûr! :-)

Fondamentalement, votre service aura un certificat pour s'authentifier, et le client aura également un certificat qui sera envoyé au service et authentifiera les clients contre le service. Du côté du serveur, vous serez en mesure de puiser dans le ServiceSecurityContext.Current.PrimaryIdentity pour avoir accès au IIdentity de l'appelant.

Pour plus d'informations, consultez ces ressources:

Espérons que cela aide un peu!
Marc

+0

Aide certainement. Toute idée sur la façon dont je pourrais procéder pour attacher le certificat à l'utilisateur authentifié. Gardez à l'esprit, l'utilisateur doit se connecter avec leurs informations d'identification de domaine à partir de là, je n'ai aucun problème à utiliser un certificat pour s'authentifier avec un service distant. Une partie de mon hang-up a été la gestion de la relation entre les informations d'identification authentifiées par le domaine et le certificat. Pensée? – Ajaxx

+0

Vous avez essentiellement deux options: (1) créer des utilisateurs Windows de votre côté et mapper le certificat à un utilisateur Windows local et authentifier de cette façon, ou (2) s'appuyer uniquement sur le certificat - si l'utilisateur présente ce certificat, il est authentifié. –

+0

Ou (3) - vous pouvez également créer des certificats individuels pour chaque utilisateur (ce qui fonctionne bien si vous avez un nombre limité d'utilisateurs) et définir leur "SubjectName" (sur leur certificat) à un nom particulier, puis vérifiez votre code contre une liste d'utilisateurs valides - quelque chose comme ça. –

Questions connexes