SSO的功能介绍和使用
单点登录SSO
SPS2003和域默认就是集成的,因为SPS2003要求用户使用域账号.微软的域本来就是一个单点登录的系统,所以该用户访问SPS2003门户网站时,只要有权限访问,就不会有一个登录过程,用户将自动按管理员赋予的权限进入门户站点.即所谓的单点登录.
但对第三方应用程序,如果它使用的用户帐号不是域账号,比如,自己有一个用户帐号维护数据库,那么就会因为用户帐户系统不同(一个是域,一个是自己的数据库),当同一个用户访问两个系统时,会有一个显式登录的过程.
如果要把这第三方应用程序集成到SPS门户上,此时就需要使用SPS2003提供的单点登录服务SSO.
SPS2003的单点登录(SSO)服务主要用于以SPS2003为基础的企业应用程序集成(EAI).
SSO主要作用是帮助完成SPS和第三方应用程序的用户登录账号之间的映射(Mapping).例如,假设SPS采用的是域用户信息,而要集成的第三方应用程序B采用是另外一套用户登录数据,那么SSO可以帮助我们完成SPS和应用程序B之间这两套不同的用户登录账号的映射,从而避免二次登录.当然,如果两个应用程序(比如SPS和Exchange Server的OWA)使用的都是windows集成验证,而当前登录机器的又是域用户帐号,那么只要这个域用户在SPS和第三方应用程序都有访问权限,此时其实就不需要SSO了.
应用SSO的一般过程是,首先在"Sharepoint Portal Server SSO管理"中配置好SSO应用程序定义-〉创建并保存一系列SPS和第三方系统用户帐号的映射对-〉开发自己的SSO Web Part,用映射账号完成登录第三方系统的操作并获取,显示相关数据-〉最后在SPS页面上部署此WebPart完成集成.
应用SSO像几乎所有的EAI一样,都需要一定的开发工作量.但SPS2003的SSO服务将帮助我们减少开发工作量,因为它帮忙完成了存储并加密两套用户帐号的映射.我们通过SPS2003提供的GetCredentials函数就能获取到SSO存储的用户名和密码,还有域名——至于能获取到什么内容,和我们在SSO管理页面上的应用程序定义处的设定相关.我给您的例子《一次登录,资源尽享(Single Sign-On)》中由于定义了用户名,密码和域名这三个字段,所以它的例子代码中就去获取了这三样信息.至于获取到这些信息后,我们怎么用它们来登录第三方应用程序,那就看我们自己代码的写法了:既可以在URL后面附加参数,也可以传给对方提供的Web Service进行登录.
SSO服务主要用来帮助实现应用程序的数据集成.它完成的主要功能是在SPS中不用二次登录就可以呈现应用程序B的某页内容或者某些业务数据.
需要说明的是,SSO不是万能的:
1) SSO只完成账户的映射和存储,无法自动进行"以映射账号登录应用程序B"这样的动作,因为它不知道对方应用系统的登录方式.这需要我们在Web Part中写代码:或者根据映射好的帐号创建一个Credential并传递给应用程序B,或者调用应用程序B暴露的Web Service进行登录.
2) SSO也不负责应用程序B所控制的交互操作.也就是说,如果您的那个应用程序页面中存在诸如"提交"按钮或者链接到另外一个页面的超链接,那么在点击这个按钮或者链接提交后,后继页面的用户验证是完全由应用程序B来控制的,已经超出了SPS的控制范围.因为SSO只传递一次用户凭证,如果这个后继页面还需要用户验证,那么您还会被提示输入用户名密码.
参考资料
这篇文章可参考:
《SharePoint Portal Server 2003 中的单一登录》
http://www.microsoft.com/china/technet/prodtechnol/sppt/reskit/c2661881x.mspx
部署SSO的步骤
要实施SSO,我们需要进行一些设定并开发一个Web部件.主要的开发和部署步骤为:
1.启用SSO服务
2.配置SSO服务器和应用程序定义
3.创建加密密钥,并指定用于映射的用户账号
4.创建SSO Web Part,读取SSO服务所存储的用户帐号并在代码中登录第三方应用程序/获取第三方应用程序页面.
5.为该SSO Web Part生成强名并编译,部署在SSO前端服务器上.
以上步骤可以参考微软的文章《一次登录,资源尽享(Single Sign-On)》
http://www.microsoft.com/china/community/MsSpecialist/1.mspx
这个例子,讲述的是使用我们映射好的账号去读取一个工作组机器上某个页面内容.
有以下几点需要说明:
1.在创建SSO Web Part项目时,要添加对Microsoft.Sharepoint.Portal.dll,Microsoft.Sharepoint.Portal.SingleSignon.dll的引用.
编译项目前,为了方便记忆和管理,我们可以将在此项目的属性页中,将"程序集"和"默认命名空间"都改成与Web Part代码中的命名空间一致的名称(例如:"WPHttpRequest"),这将使得编译输出的dll名称和SSO Web Part的名称一致.
2.微软网站上的例子是以英文为例的,如果要用此样例代码获取中文页面,我们需要在WebPart代码中将这句代码:
StreamReader sr = new StreamReader(stream);
改成:
StreamReader sr = new StreamReader(stream, System.Text.Encoding.GetEncoding("gb2312"));
这样将按GB2312格式获取页面的流,从而避免乱码显示.
3.日后若对该Web Part的源代码作了变动,您将需要重新部署这个WebPart(推荐部署在GAC中).此时您有两种方式,可以任选其一:
1)保持该WebPart项目的版本号不变,把已有的WebPart dll删除,重新部署.
2)将该WebPart项目的版本号增一,例如,在AssemblyInfo.cs将[assembly: AssemblyVersion("1.0.0.0")]改成[assembly: AssemblyVersion("1.0.0.1")].重新部署.这个方法就不需要从GAC中删除已有的Web Part dll.
3)重新在SPS页面上添加这个新版本的WebPart.
相关文档
《一次登录,资源尽享(Single Sign-On)》
http://www.microsoft.com/china/community/MsSpecialist/1.mspx
《Single Sign-On in SharePoint Portal Server 2003》
http://www.microsoft.com/technet/prodtechnol/sppt/reskit/c2661881x.mspx
其中,这段话讲述了SSO和开发的关系,拷贝出来供您参考:
After you have configured the single sign-on and created the application definitions, you need to develop a Web Part that implements the single sign-on functionality and retrieves information from the corresponding back-end application programmatically.
希望以上信息能帮您更好地理解SPS2003上的SSO服务组件.
其他参考资料:==========================
常见SSO原理及其实现
SSO原理