很久沒來博客園嘮叨了,今天剛好有空上來逛逛,順便添加一篇實用的文章。很多人都知道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配置記得改成自己的配置。
using
?System;
?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
using
?System;
?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
}
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元


????