前面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 >