天天看點

MOSS2007 如何實作SSO項目總結

MOSS2007 如何實作SSO項目總結

  單點登陸目前以下幾種情況:

1 如果MOSS2007采用AD認證,可以使用MOSS自帶的SSO,分别把使用者資訊(使用者名和密碼)采用POST方式傳遞給各個應用系統(如:OA系統,郵件系統等);

2 如果MOSS2007采用Form認證,可以使用MOSS自帶的SSO,分别把使用者資訊(使用者名和密碼)采用POST方式傳遞給各個應用系統(如:OA系統,郵件系統等);

3 如果公司有自己的使用者管理系統,而又擁有單獨的SSO系統,需求是實作各個應用系統(如OA,郵件)與MOSS雙向實作單點登陸;

現在介紹實作思路如下:

(1)開發自定義Membership 和 RoleProvider

MembershipProvider必需實作的接口為:

System.Web.Security.MembershipProvider.GetUser

System.Web.Security.MembershipProvider.GetUserNameByEmail(System.String)

System.Web.Security.MembershipProvider.ValidateUser(System.String,System.String)

System.Web.Security.MembershipProvider.FindUsersByEmail(System.String,System.Int32,System.Int32,System.Int32)

System.Web.Security.MembershipProvider.FindUsersByName(System.String,System.Int32,System.Int32,System.Int32)

RoleProvider必需實作的接口為:

System.Web.Security.RoleProvider.GetRolesForUser(System.String)

System.Web.Security.RoleProvider.RoleExists(System.String)

(2)入口為SSO,開發自定義WebPart,核心代碼如下:

            //如果使用者登陸,則顯示使用者登陸資訊,已經各個應用系統的入口位址

            if (this.Context.User.Identity.IsAuthenticated == true)

            {

                //this.LoginPanel.Visible = false;

                this.WelcomeLabel.Text = SPContext.Current.Web.CurrentUser.Name.ToString();

                this.WelcomePanel.Visible = true;

            }

            else

            {

                //統一入口為SSO

                //如果使用者沒有登陸,則跳轉到SSO的登陸頁面,如果登陸成功,則由SSO自動重定向MOSS站點首頁

                //在這個過程中,使用者的資訊已經由SSO成功記錄,這時其它應用系統就能共享這些資訊,實作與MOSS雙向單點登陸

                SSOClient.SSOClientBusiness ssoClient = new SSOClient.SSOClientBusiness();

                Dictionary<string, string> userInfo = ssoClient.Login(null, this.Page);

                //擷取帳戶名

                MembershipUser muser = Membership.GetUser((object)userInfo["UniqueID"], false);

                //用帳戶名登陸MOSS

                FormsAuthentication.RedirectFromLoginPage(muser.UserName, false);

                Response.Redirect(Request.Url.ToString());

            }

 (3)入口為MOSS,開發自定義WebPart,核心代碼如下:

         protected void Page_Load(object sender, EventArgs e)

        {

            if (this.Context.User.Identity.IsAuthenticated == true)

            {

                this.LoginPanel.Visible = false;

                this.WelcomeLabel.Text = SPContext.Current.Web.CurrentUser.Name.ToString();

                this.WelcomePanel.Visible = true;

            }

            else

            {

                this.LoginPanel.Visible = true;

                this.WelcomePanel.Visible = false;

            }

        }

         protected void loginSubmit_Click(object sender, EventArgs e)

        {

            string userID = this.loginUserId.Text;

            string password = this.loginUserPwd.Text;

            if (Membership.ValidateUser(userID, password))

            {

                //在這裡采用跨越Cookie,以達到MOSS與應用系統的雙向單點登陸,

                // 這個沒能最終實作,如果有高手已經實作,請共享出來

                //用帳戶名登陸MOSS

                FormsAuthentication.RedirectFromLoginPage(userID, this.RememberMe.Checked);

                Response.Redirect(Request.Url.ToString());

            }

            else

            {

                this.lblTipMsg.Text =  "使用者名或密碼不正确,請重新登陸!";

            }

        }

    }