2009-11-11 10 views
3

Je suis nouveau à WCF. Disons que j'ai deux applications asp.net, une qui utilise l'authentification Windows (une application intranet), et une qui utilise l'authentification par formulaires (une application Internet). Je veux que ces deux applications aient une référence de service à une machine physiquement séparée où toute ma logique métier vivra (en WCF). Ainsi, l'application est comme ceci:Passer l'identité de l'utilisateur à travers les niveaux avec ASP.NET et WCF

Navigateur -> ASP.NET -> WCF. Lorsque l'appel se termine dans le niveau WCF, j'ai besoin de connaître le nom d'utilisateur qu'ASP.net a obtenu (User.Identity.Name).

Avec .NET Remoting, j'ai créé un principal personnalisé que j'ai stocké dans le LogicalCallContext. Ensuite, avec un récepteur d'accès distant personnalisé sur le côté serveur distant, j'ai défini le principal thread en cours sur le principal dans le LogicalCallContext.

Quelle est la bonne façon de faire quelque chose comme ça avec WCF? Encore une fois, mon service WCF peut uniquement être appelé par le compte de service exécutant ASP.NET, mais j'ai besoin de savoir qui est l'appel en fin de compte.

Répondre

2

Votre service WCF authentifie-t-il et approuve-t-il les applications ASP.NET (par exemple, en utilisant l'authentification Windows pour authentifier le compte de service sous lequel les applications ASP.NET s'exécutent).

Si tel est le cas, vous pouvez envisager de transmettre des informations sur l'appelant final dans un en-tête SOAP personnalisé.

Vous pouvez masquer les détails sanglants de votre code d'application en utilisant un comportement WCF personnalisé avec un ClientMessageInspector qui ajoute l'en-tête SOAP du côté client et un DispatchMessageInspector qui traite l'en-tête SOAP du côté serveur.

+1

Oui, exactement. Je ferais confiance au compte de service ASP.NET. En-têtes personnalisés Ok, c'était une méthode que j'avais envisagée, mais je pensais qu'il pourrait y avoir une façon plus "standard" de faire les choses. Merci. – aquinas

+0

Je ne pense pas qu'il existe un moyen standard - au moins, j'ai posé cette question sur StackOverflow et n'a pas eu de réponse: http://stackoverflow.com/questions/774026/soap-header-with-identity-of-final -client – Joe