2009-10-05 5 views
0

Nous avons un site en .NET 3.5 avec un multiplexe membre/fournisseur de rôle, et un site PHP connecté (sur un serveur différent) qui utilise les mêmes utilisateurs (ou en partie atleast) et nous examinons la possibilité d'utiliser une seule signature et je me demande si d'autres ont fait quelque chose comme ça qui fonctionne. Lorsque l'authentification du site PHP est effectuée, il définit une variable de session avec l'ID utilisateur, puis redirige l'utilisateur vers la page de démarrage. À l'avenir, l'utilisateur se connecte toujours sur le site ASP.NET. J'ai donc essayé de m'authentifier sur le site PHP en même temps qu'ASP.NET. Pour pouvoir utiliser le mot de passe de l'utilisateur que j'ai ajouté la logique de la méthode ValidateUser dans le MembershipProvider:Single Sign-On ASP.NET et PHP

   HttpWebRequest req = HttpWebRequest.Create(url) as HttpWebRequest; 
       string data = string.Format("username={0}&password={1}", MembershipHelper.UrlEncode(username), MembershipHelper.UrlEncode(password)); 
       req.Method = WebRequestMethods.Http.Post; 
       req.ContentLength = data.Length; 
       req.ContentType = "application/x-www-form-urlencoded"; 
       req.AllowAutoRedirect = false; 
       req.CookieContainer = new CookieContainer(); 

       StreamWriter w = new StreamWriter(req.GetRequestStream()); 
       w.Write(data); 
       w.Close(); 

Mais comme vous pouvez le comprendre, il ne fonctionne pas. Quand je visite le site php, je ne suis toujours pas connecté, ce qui bien sûr a quelque chose à voir avec la session, mais je n'arrive pas à comprendre comment le transférer correctement.

+0

Nous essayons également de créer un concept de signature unique entre les sites .NET et PHP. Comment pouvons-nous faire cela, Doit-on utiliser le SAML, OPENID? Est-ce gratuit ou besoin d'acheter? Est-ce un problème de sécurité? Suggérer les étapes de mise en œuvre et où je l'ai téléchargé? – Thilak

Répondre

3

Le code que vous avez affiché effectue une requête côté serveur sur le site PHP et transmet le nom d'utilisateur et le mot de passe afin d'effectuer l'authentification. Vous utilisez également un conteneur de cookies pour stocker le cookie de session émis par le site PHP. Si l'authentification réussit, vous devrez récupérer le cookie de session du conteneur (en utilisant la méthode GetCookies) et l'envoyer dans la réponse de la page ASP.NET (en utilisant AppendCookie). De cette façon, le cookie sera stocké sur le navigateur du client (au lieu du conteneur de cookie temporaire). Une fois le cookie stocké dans le navigateur de l'utilisateur, il sera automatiquement envoyé lors de la prochaine requête sur le site PHP (à condition que ce site soit sur le même domaine que votre site ASP.NET) et vous serez connecté.

Si Les deux sites sont hébergés sur des domaines différents, mais l'utilisation de cookies pour effectuer une authentification unique peut s'avérer plus compliquée.

Questions connexes