MOSS2007 如何实现SSO项目总结
2009-04-13 20:17
288 查看
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 = "用户名或密码不正确,请重新登陆!";
}
}
}
单点登陆目前以下几种情况:
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 = "用户名或密码不正确,请重新登陆!";
}
}
}
相关文章推荐
- MOSS2007 如何实现SSO项目总结
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
- 总结项目中遇到的问题以及如何解决
- S6.6_Struts2_I18n 项目如何实现国际化 I18n
- 如何在项目里面使用freemarker实现页面缓存(三)
- 自己在项目中的学习总结:利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口
- 如何在项目启动的时候做一些业务处理 (实现ServletContextListener)
- 新浪微博如何实现 SSO 的分析
- 在一个Android项目里面有两个可运行文件,如何实现调用方式
- 如何写项目总结
- JAVAWEB项目如何实现验证码
- [项目总结]在ios中使用soundtouch库实现变声 推荐
- 【我的第一个App——私人通讯录】项目需求、实现技术点总结
- React-redux-webpack项目总结之reduce、action、store、components 是如何开车的
- 【Java_项目篇<1>】--JAVA实现坦克大战游戏--总结(七)
- 项目技术总结一之JSONP实现跨域调度
- 如何在自己的项目中实现 Fluent Interface(流畅接口)
- 总结如何实现Android浮动层,主要是dialog的使用。
- 详解如何使用gulp实现项目在浏览器中的自动刷新
- java开发微信项目总结(二) 如何获取微信的OpenId