代码改变世界

MOSS与业务系统的集成 之 单点登录

2008-08-05 16:35  sun@live  阅读(502)  评论(0编辑  收藏  举报

前面MOSS与业务系统的集成 自定义Membership实现Forms方式验证文章中,我们实现了两系统的用户集成,下面要解决的是两系统间的单点登录问题。

部署在两台不同的服务器上的系统,要实现单点登录,最好的办法就是使用Cookie共享来实现了。只要将两系统使用同一根域名,并且用户保存用户登录票据的Cookie名称,以及Cookie加解密密钥一致即可。

  1. 业务系统的写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 
         
  2. 业务系统的web.config修改
    <!--Cookie名称与根域名需一致-->
    <authentication mode="Forms">
          
    <forms name="CookieName"  domain=".domain.com" path="/" ></forms>
    </authentication>
  3. 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>