2009-10-05 80 views
0

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

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

在未来,这意味着用户总是登录到ASP.NET网站,所以我所做的就是尝试在ASP.NET网站上同时进行身份验证。为了能够使用用户的密码我已经添加上的的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网站时,我仍然没有登录,当然这与会话有关,但我无法弄清楚如何正确传输它。

+0

我们也试图在.NET和PHP网站之间进行单点登录。我们如何做到这一点,我们可以使用SAML,OPENID吗?它是免费还是需要购买?那里有安全问题吗? 建议实施步骤和我下载的地方? – Thilak 2011-06-17 10:23:35

回答

3

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

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

如果这两个网站托管在不同的域名,然后使用cookie执行单一登录可能会更棘手。