單點登入(Single Sign On),簡稱為 SSO。SSO的定義是在多個應用系統中,使用者只需要登入一次就可以訪問所有相互信任的應用系統。
在Microsoft Office SharePoint Server 2007中提供了實現單點登入的功能。
下面是一個具體的執行個體,其實類似的實現網上有很多。
一、配置資料來源
用於儲存使用者對於第三方公司專屬應用程式程式的登入憑據,可以將該憑據記錄到資料庫中,sharepoint清單項目以及sharepoint本身的資料庫中。下面介紹儲存於SSO資料庫中的方法。
1. 配置開啟Microsoft Single Sign-on Service服務。
SSO的應用是利用了Microsoft Single Sign-on Service的服務,預設此服務為停止狀態。選擇開始程式管理工具服務,選取Microsoft Single Sign-on Service服務, ;
預設此服務為關閉狀態,雙擊此服務。如,選擇登入選項卡,登入身份選擇“此帳戶”,在其中輸入賬戶及密碼。注意此賬戶為域使用者。(否則SSO調用會失敗)。
選擇“常規”選項卡,啟動類型選擇為“自動”,並啟動此服務。狀態如下:
2. 配置“管理單一登入的設定”。
2.1配置“伺服器設定”
配置好SSO的服務後,開始組態管理單一登入的設定。開始→程式→Microsoft Office ServerSharePoint 3.0管理中心。在管理中心,選取“操作選項卡”,並選擇“安全性配置”中的“管理單一登入的設定”。如:
預設進入後,“伺服器設定”和“公司專屬應用程式程式定義設定”均未進行設定。首先設定伺服器設定,選擇設定“管理伺服器設定”。如下:
在“單一登入系統管理員帳戶”和“公司專屬應用程式程式定義系統管理員帳戶”中填寫對應的賬戶名。“資料庫設定”和“逾時設定”均為預設,。
注意:如果確定後提示“資料庫錯誤”,則在“資料庫設定”中將“伺服器名稱”修改為你的存取MOSS的SQL2005伺服器的名稱。
關於“管理加密金鑰”,在本測試中沒有加入此功能。此加密金鑰對憑證加密。在普通的應用中丌用增加此功能。
2.2配置“公司專屬應用程式程式定義設定”。
“管理公司專屬應用程式程式定義的設定”指整合SSO的後端應用的設定,如ERP,OA,Mail等等應用系統。
進入“管理公司專屬應用程式程式定義的設定”;如:
選取建立項目,,填寫“應用程式和連絡人資訊”和選擇“帳戶類型”資訊。以新浪郵箱為例,
其中“顯示名稱:”為後端應用系統的名字,而“顯示名稱:”則為GetCredentials擷取的值。賬戶類型中選擇“個人”,,因為這裡SSO賬戶為MOSS使用者和後端應用系統的使用者映射。其他資訊預設,確定。
配置“管理公司專屬應用程式程式定義的帳戶資訊”,選取“公司專屬應用程式程式定義:”填寫
“使用者帳號名稱”。注意:(如果對應的“管理公司專屬應用程式程式定義的設定”中將賬戶類型確定為“組”則輸入組帳號。)
選取“更新賬戶資訊”,確定 。
在“提供 網易163郵箱 帳戶資訊”頁面中輸入對應MOSS帳號的163郵箱的帳號和密碼,確定,
二、寫程式完成單點登入。
1. 取得連接字串
首先進入163登入郵箱頁面,輸入自己的使用者名稱與密碼,開啟HttpWatchPro軟體(可在網上下載),點擊開始記錄按鈕→點擊163郵箱的登入按鈕,登入成功後,再停止HttpWatchPro的記錄。將查到的Http請求字串複製下來,如下:“http://reg.163.com/login.jsp?url=&type=1&product=&savelogin=&outfoxer=&domains=&syscheckcode=&username=mossadmin@163.com&password=111111&Submit=”。在該字串中有兩個參數username與password既是登入郵箱時輸入的使用者名稱與密碼。
2. 建立webpart登入程式。
開啟Microsoft Visual Studio 2005,建立ASP.NET Web應用程式,命名為FirstSSO。此為安裝了Visual Studio 2005 Service Pack 1 (SP1)。
刪除預設的Default.aspx頁面。
在此項目中添加Web使用者控制項頁面,命名為MeSSO,如下:
在MeSSO的設計試圖中加入按鈕,介面如下:
原始碼為:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="MeSSO.ascx.cs" Inherits="MeSSO" %>
<asp:Button ID="Btn163" runat="server" Text="網易163郵箱=>進入" Width="130px" />
雙擊按鈕控制項,進入原始碼編寫頁面。在此項目中添加引用,分別添加對Microsoft.SharePoint.dll,microsoft.sharepoint.portal.dll、Microsoft.SharePoint.Portal.SingleSignon.dll的引用。
目錄為C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI檔案夾中。
添加對Microsoft.SharePoint,microsoft.sharepoint.portal,Microsoft.SharePoint.Portal.SingleSignon的引用。原始碼如下:
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using Microsoft.SharePoint; using Microsoft.SharePoint.Portal; using Microsoft.SharePoint.Portal.SingleSignon; namespace FirstSSO { public partial class MeSSO : System.Web.UI.UserControl {protected void Page_Load(object sender, EventArgs e){}protected override void OnInit(EventArgs e){base.OnInit(e);SSOCanaryChecker.AddCanary(Page);}protected void BtnGoogle_Click(object sender, EventArgs e){IntPtr pUserName = IntPtr.Zero;IntPtr pPassword = IntPtr.Zero;try{ISsoProvider isso = SsoProviderFactory.GetSsoProvider();SsoCredentials myCreds = isso.GetCredentials("GoogleMail");pUserName = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.UserName);String userName = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pUserName);pPassword = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.Password);String Password = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pPassword);String strHttpUrl ="http://reg.163.com/login.jsp?url=&type=1&product=&savelogin=&outfoxer=&domains=&syscheckcode=&username=" + userName + "@163.com&password=" + Password +"&Submit=";Response.Redirect(strHttpUrl)} catch (Exception exx) { Response.Write(exx.Message); Response.Write(exx.InnerException); } finally { if (IntPtr.Zero != pUserName) { System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(pUserName); System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(pPassword); } } }}}
3. 將完成的webpart部署到sharepoint網站,完成。