2009-10-05 82 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執行單一登錄可能會更棘手。