前面MOSS與業務系統的整合 之 自訂Membership實現Forms方式驗證文章中,我們實現了兩系統的使用者整合,下面要解決的是兩系統間的單點登入問題。
部署在兩台不同的伺服器上的系統,要實現單點登入,最好的辦法就是使用Cookie共用來實現了。只要將兩系統使用同一根網域名稱,並且使用者儲存使用者登入票據的Cookie名稱,以及Cookie加解密密鑰一致即可。
- 業務系統的寫cookie方式 1 protected static void WriteCookie(string userName, bool isPersistent)
2 {
3 FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
4 1,
5 userName,
6 DateTime.Now,
7 DateTime.Now.AddMinutes(80),
8 isPersistent,
9 userName,
10 FormsAuthentication.FormsCookiePath);
11 // Encrypt the ticket.
12 string encTicket = FormsAuthentication.Encrypt(ticket);
13 HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
14
15 //如果使用者使用網域名稱訪問ADC,則在cookie上增加網域名稱資訊
16 if (IsValidDomain(HttpContext.Current.Request.Url.Host))
17 {
18 myCookie.Domain = FormsAuthentication.CookieDomain;
19 }
20
21 if (isPersistent)
22 {
23 myCookie.Expires = ticket.Expiration;
24 }
25 // Create the cookie.
26 HttpContext.Current.Response.Cookies.Add(myCookie);
27 }
28
29 protected static bool IsValidDomain(string strIn)
30 {
31 string strPattern = @"^\w+([-.]\w+)*\.\w+([-.]\w+)*$";
32 return System.Text.RegularExpressions.Regex.IsMatch(strIn, strPattern);
33 }
34
- 業務系統的web.config修改<!--Cookie名稱與根網域名稱需一致-->
<authentication mode="Forms">
<forms name="CookieName" domain=".domain.com" path="/" ></forms>
</authentication>
- Moss網站的web.config修改 <!--將MOSS網站web.config中machineKey配置複製到業務系統中,兩系統保持一致即可 -->
<machineKey validationKey="C57043728999BCF9537BA55F5978F50722C91B26A0F9D34F"
decryptionKey="C57043728999BCF9537BA55F5978F50722C91B26A0F9D34F"
validation="SHA1" /><!--Cookie名稱與根網域名稱也需一致-->
<authentication mode="Forms">
<forms name="CookieName" domain=".domain.com" path="/" ></forms>
</authentication>
原文地址:http://www.cnblogs.com/CSharp/archive/2008/08/05/1261104.html