2009-11-20 5 views
3

je cet environnement existant:Authentification ASP.NET, SilverLight, WCF et formulaires - Comment configurer les points de terminaison?

1) application Web ASP.NET 3,5

2) l'authentification par formulaire avec le SqlMembershipProvider

Je dois ajouter ce qui suit:

1) un objet cartographique Silverlight incorporé dans une page Web.

2) un service WCF à consommer par:

a) the Silverlight component embedded in an authenticated 
     web page, as mentioned above 

b) server-based WCF clients with certificate based authentication 

Ma question est - ce qui est le plus facile/meilleure façon de configurer les points de terminaison WCF pour l'objet Silverlight pour authentifier au service WCF en utilisant le contexte de sécurité de l'utilisateur déjà connecté (via la page qui héberge l'objet Silverlight) sans avoir à réutiliser le nom d'utilisateur/mot de passe de l'utilisateur?

J'ai étudié beaucoup de matériel MSDN et Patterns & Practices et je pensais avoir une bonne compréhension de la plupart des scénarios d'authentification potentiels. Mais je n'arrive pas à trouver un moyen de les lier ensemble pour le scénario que j'ai décrit. J'ai trouvé d'autres personnes postant des questions similaires à la mienne, mais aucune des réponses que j'ai lues ne semble répondre pleinement à leurs questions non plus. (Peut-être que je rends cela plus difficile que cela doit être?)

Je pense que la solution serait d'utiliser en quelque sorte le jeton d'authentification/cookie généré dans le formulaire de connexion asp.net et en quelque sorte le passer à la Silverlight objet qui l'inclut ensuite dans la requête WCF. Mais je ne vois pas comment configurer le point de terminaison WCF pour utiliser ce jeton. (Dans certains de mes autres projets, j'ai implémenté le scénario de serveur à serveur dans 2.b ci-dessus en utilisant l'authentification par certificat, donc je ne suis pas trop inquiet à propos de l'ajout au mixage actuel. décrit.)

Merci d'avance pour toute idée ou pointeurs vers le chemin vers l'avant.

Terry

Répondre

1

Merci codemeit pour essayer d'aider mais j'ai finalement compris ce que je faisais mal - c'était une erreur de pilote.

En essayant de configurer les points de terminaison pour mon application Silverlight, je testais avec une page asp.net. J'ai finalement réalisé que lorsque je fais ce test, le point de terminaison client ne provient plus du navigateur authentifié - le point de terminaison client est le serveur IIS qui à son tour exécute la requête sur le point de terminaison du serveur WCF. Ainsi, le contexte de sécurité change et HttpContext.Current.User.Identity est toujours vide au niveau du point de terminaison du serveur WCF. Une fois que mon application SL de test fonctionnait dans le navigateur, elle héritait automatiquement du contexte de sécurité du navigateur authentifié, puis HttpContext.Current.User.Identity était correct et authentifié au niveau du point de terminaison du serveur WCF.

0

Avez-vous essayé de permettre à vos services WCF avec compatibilité réSEAU, puis voir si ce qui suit est vrai.

string currentUserName = HttpContext.Current.User.Identity.Name; 
bool isLoggedIn = HttpContext.Current.User.Identity.IsAuthenticated; 

Si ces propriétés sont remplies avec les valeurs attendues, alors c'est celui que vous recherchez.

Pour activer la compatibilité du réSEAU

Ajouter à la web.config

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 

ajouter à la classe service impl

[AspNetCompatibilityRequirements 
    (RequirementsMode=AspNetCompatibilityRequirementsMode.Required)] 

Dans ce cas, le point final serait d'utiliser basicHttpBinding, et vous pourrait vérifier l'authentification au moment de l'exécution dans WCF.

+0

J'ai testé avec toutes ces choses. Lorsque je définis l'autorisation à 'deny users ="? "' J'obtiens une exception System.ServiceModel.ProtocolException car la page login.aspx par défaut est renvoyée en tant que réponse WCF. Si je supprime le paramètre deny users et que je me connecte avant de faire la demande WCF, puis que je fais la requête WCF, HttpContext.Current.User.Identity.Name est vide et .IsAuthenticated est false. J'ai l'impression d'avoir manqué quelque chose de simple et évident quelque part ... J'ai essayé de rouler manuellement les terminaux client et serveur et j'ai aussi essayé d'utiliser les modèles WCF SL-Enabled et l'assistant "add service ref" – tblank

+0

: //msdn.microsoft.com/en-us/library/bb398990.aspx Il s'agit d'un exemple d'exposition d'un service d'authentification, mais le WCF utilise le formulaire auth. J'espère que cela vous donnera une idée. –

Questions connexes