很久没来博客园唠叨了,今天刚好有空上来逛逛,顺便添加一篇实用的文章。很多人都知道MOSS自带了一个重要特性。方便企业多系统之间的集成和整合。而单点登入就成为了炙热可得的一把利剑(至于什么叫单点登入,新手如果不明白直接google吧)。不够要在MOSS上实现SSO,遇到的一个问题就是你得熟悉第三方系统的验证模式。在不清楚第三方系统是windows还是表单验证的却会给实现带来很大的麻烦。闲话不多说,下面直接贴图。
1:当前用户的信息在SSO数据库不存在时,跳转到SSO信息配置页面(也可以用SSO默认自带的页面,,我这就没截图了)
2:配置成功。笔者为了让大家看测试效果,让他显示在页面。
3:点击进入聊天室
下面来阐述下具体的实现思路:
1:知道要继承单点登入的第三方系统的验证方式,然后单点登入提交的方式一般用到POST 或GET 进行提交。
2:主要用到SSO 中的Credentials类的两个方法分别为:SetCredentials(配置单点登入信息)。GetCredentials(获取用户的配置信息)
实现的方式:A首先打开管理中心-操作-单点登入配置。进行SSO的相关设置。
这块的资料网上也很多,配置步骤可以直接借鉴
十一的博客
。
B:新建一个web应用程序
笔者在这新建两个页面:Getusermsg.ascx 和ssowebpart.ascx.添加Microsoft.Sharepoint.Portal.SingleSingon.dll ,Microsoft.Sharepoint.Portal.dll
代码如下:
Getusermsg.cs
注意:下面代码中第三方系统的url配置记得改成自己的配置。
2 using System.Data;
3 using System.Configuration;
4 using System.Collections;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.WebControls;
9 using System.Web.UI.WebControls.WebParts;
10 using System.Web.UI.HtmlControls;
11 using Microsoft.SharePoint;
12 using Microsoft.SharePoint.Portal;
13 using Microsoft.SharePoint.Portal.SingleSignon;
14 namespace SSOwebpart
15 {
16 public partial class Getusermsg : System.Web.UI.UserControl
17 {
18 protected override void OnInit(EventArgs e)
19 {
20 base .OnInit(e);
21 SSOCanaryChecker.AddCanary( this .Page);
22
23 }
24
25 protected void Page_Load( object sender, EventArgs e)
26 {
27
28 string [] rgCredentials = null ;
29 try
30 {
31
32 Credentials.GetCredentials( 1 , " chatroom " , ref rgCredentials);
33 lb_username.Text = rgCredentials[ 0 ].ToString();
34 lb_pwd.Text = rgCredentials[ 1 ].ToString();
35 string url = " /chatroom/sso_login.asp?name= " + lb_username.Text + " &pwd= " + lb_pwd.Text + "" ;
36 lb_msg.Text = " <a href= " + url + " target='_blank'>进入聊天室</a> " ;
37
38 }
39
40 catch (SingleSignonCredsNotFoundException ssoe)
41 {
42 // 在SSO数据库中找不到当前用户的信息
43 if (SSOReturnCodes.SSO_E_CREDS_NOT_FOUND == ssoe.LastErrorCode)
44
45 {
46 string strSSOLogonFormURL = SingleSignonLocator.GetCredentialEntryUrl( " chatroom " );
47 lb_msg.Text = " <a href= " + strSSOLogonFormURL + " >对不起!当前数据库没有您的登入信息凭证,请创建!</a> " ;
48 }
49
50 }
51 }
52 }
53 }
ssowebpart.cs
2 using System.Collections;
3 using System.Configuration;
4 using System.Data;
5 // using System.Linq;
6 using System.Web;
7 using System.Web.Security;
8 using System.Web.UI;
9 using System.Web.UI.HtmlControls;
10 using System.Web.UI.WebControls;
11 using System.Web.UI.WebControls.WebParts;
12 using System.Xml.Linq;
13 using Microsoft.SharePoint;
14 using Microsoft.SharePoint.Portal;
15 using Microsoft.SharePoint.Portal.SingleSignon;
16
17 namespace SSOwebpart
18 {
19 public partial class ssowebpart : System.Web.UI.UserControl
20 {
21 protected void Page_Load( object sender, EventArgs e)
22 {
23
24 }
25
26
27 // 单点登入用户配置
28 protected void btn_save_Click( object sender, EventArgs e)
29 {
30 if (txt_username.Text == "" || txt_username.Text == null )
31 {
32 lb_msg.Text = " 请输入用户名! " ;
33 return ;
34
35 }
36 if (txt_pwd.Text == "" || txt_pwd.Text == null )
37 {
38 lb_msg.Text = " 密码不为空! " ;
39 return ;
40
41 }
42 string [] rgSetCredentialData = new string [ 2 ];
43 rgSetCredentialData[ 0 ] = this .txt_username.Text;
44 rgSetCredentialData[ 1 ] = this .txt_pwd.Text;
45 try
46 {
47 Credentials.SetCredentials( 1 , " chatroom " , rgSetCredentialData);
48 }
49 catch (SingleSignonException esso)
50 {
51 this .lb_msg.Text = esso.Message + " <br> " + esso.StackTrace;
52 }
53 }
54 }
55 }