单点登录ASP.NET和PHP

时间:2009-10-05 13:00:52

标签: c# php asp.net authentication

我们在.NET 3.5中创建了一个具有多路复用成员资格/角色提供程序的站点,以及一个使用相同用户(或部分至少)的连接PHP站点(在不同的服务器上),我们正在研究使用的可能性单点登录,我想知道其他人是否做过这样的工作。

当PHP站点的身份验证完成后,它会使用用户ID设置会话变量,然后将用户重定向到起始页。

将来它意味着用户总是登录ASP.NET站点,所以我所做的就是尝试在ASP.NET上同时在PHP站点上进行身份验证。为了能够使用用户的密码,我在membershipprovider中的ValidateUser方法中添加了逻辑:

                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();

但是你可以理解,它不起作用。当我访问php网站时,我仍然没有登录,这当然与会话有关,但我无法弄清楚如何正确传输它。

1 个答案:

答案 0 :(得分:3)

您显示的代码向PHP站点执行服务器端请求,并传递用户名和密码以执行身份验证。您还使用cookie容器来存储PHP站点发出的会话cookie。

如果身份验证成功,则必须从容器中检索会话cookie(使用GetCookies方法)并将其发送到ASP.NET页面的响应中(使用AppendCookie)。这样,cookie将存储在客户端浏览器(而不是临时cookie容器)上。一旦cookie存储在用户的浏览器中,它将自动沿着下一个请求发送到PHP站点(假设此站点与ASP.NET站点位于同一个域中),您将登录。

如果两个站点都托管在不同的域上,那么使用cookie执行单点登录可能会比较棘手。