|
在SharePoint 2007時代我們可以通過Microsoft Single Sign-on Service來實現單點登錄,但到了SharePoint 2010中不再有Single Sign-on這個服務了,取而代之的則是Secure Store Service簡稱SSS。與以前的SSO一樣,SSS也提供了一個數據庫實例來保存用于訪問某些外部應用程序或外部數據源的用戶憑據信息,所不同的是我們不僅可以使用SSS中保存的憑據信息來實現單點登錄,同時BDC、Excel Service等服務應用程序現在也可使用SSS中保存的憑據來訪問外部數據源。接下來的內容中小弟我將對如何使用SSS實現單點登錄進行詳細的說明。
與2007相同的是在SP 2010中要實現單點登錄依然需要我們寫代碼來實現,不過在這之前還需要對場中的SSS服務進行初始配置。
對SSS進行初始配置
首先進入SharePoint 2010管理中心,在應用程序管理頁面選擇管理服務應用程序。
在服務應用程序頁面,選擇Secure Store Service,然后點擊上方Ribbon區中的管理。
在初次進入SSS管理頁面時,系統將提示我們“在創建新的安全存儲目標應用程序之前,必須首先在功能區中為此 Secure Store Service 應用程序生成新密鑰。”
該密鑰將對我們存儲在SSS數據庫中的憑據信息進行加密和解密。
點擊Ribbon區內的生成新密鑰,在彈出窗口中為該密鑰設置通行短語。
創建目標應用程序
如果大家在SharePoint 2007中曾經使用過SSO的話應該對這部分的內容比較熟悉,關于創建目標應用程序的操作與2007相比并無很大區別。
首先還是進入我們的SSS實例的管理頁面,在Ribbon區里的管理目標應用程序組中單擊新建按鈕進入創建新的安全存儲目標應用程序頁面。
我們需要設置目標應用程序的ID、顯示名稱、聯系人電子郵件、目標應用程序類型這四個主要屬性,其中比較重要的屬性是目標應用程序ID和目標應用程序類型。ID是SSS用于識別此目標應用程序的唯一標識,目標應用程序類型主要分為個人和組兩大類,如果選擇個人則可以啟用一個目標應用程序頁,該頁面將用于用戶自行添加該目標應用程序的個人憑據。
因為在本例中要做的是用戶與其個人郵箱間的映射,所以這里選擇個人就好了,然后點擊下一步。下面要做的就是設置將憑據提交到外部數據源時所要用到的字段了,默認情況下是用戶名和密碼兩個字段。其中的已屏蔽選項表示當用戶在輸入該字段的值時將以屏蔽字符代替用戶的輸入字符,例如 *號。在本例中保持默認值就可以了。
最后還需要為此目標應用程序設置一個管理員。
OK,到了這里所有的配置工作就結束了,由于在SharePoint 2010中微軟仍然沒有提供一個可以out-of-box的WebPart,所以像07中一樣,要實現單點登錄的話還需要我們自己來開發一個WebPart。
創建單點登錄WebPart
由于在SharePoint 2010中微軟用SSS取代了以前的SSO,所以在2007中實現單點登錄時所用的代碼現在已經不能用了,需要用SP 2010中新的對象模型來完成這一功能。
使用VS2010創建一個空白SharePoint項目,然后添加一個可視Web部件。
接著在此項目中添加Microsoft.BussinessData和Microsoft.Office.SecureStoreService的引用。這里呢可能會出現一個問題,因為在/Microsoft Shared/Web Server Extensions/14/ISAPI這個目錄下只有Microsoft.Office.SecureStoreService.Server.Security這個dll,需要我們自己到GAC中將Microsoft.Office.SecureStoreService這個dll拷貝出來才行,可以參看http://support.microsoft.com/kb/982263。Microsoft.BussinessData可以在/Microsoft Shared/Web Server Extensions/14/ISAPI目錄下找到。
通過下面這段代碼可獲得當前用戶存儲在SSS中的目標應用程序憑據。
protected void Button1_Click(object sender, EventArgs e)
{
string m_userName = string.Empty;
string m_password = string.Empty;
string m_html = string.Empty;
string m_appId = "163Mail";
SecureStoreProvider m_provider = new SecureStoreProvider();
SPSite m_site = SPContext.Current.Site;
SPServiceContext m_serviceContext = SPServiceContext.GetContext(m_site);
m_provider.Context = m_serviceContext;
try
{
SecureStoreCredentialCollection m_sscc = m_provider.GetCredentials(m_appId);
foreach (SecureStoreCredential ssc in m_sscc)
{
switch (ssc.CredentialType)
{
case SecureStoreCredentialType.Generic:
break;
case SecureStoreCredentialType.Key:
break;
case SecureStoreCredentialType.Password:
m_password = ToClrString(ssc.Credential);
break;
case SecureStoreCredentialType.Pin:
break;
case SecureStoreCredentialType.UserName:
m_userName = ToClrString(ssc.Credential);
break;
case SecureStoreCredentialType.WindowsPassword:
break;
case SecureStoreCredentialType.WindowsUserName:
break;
default:
break;
}
}
m_html += "<script>";
m_html += string.Format("window.location.", m_userName, m_password);
m_html += "</script>";
Response.Write(m_html);
}
catch (Exception ex)
{
Response.Write("<script>window.location.href= '/_layouts/SecureStoreSetCredentials.ASPx?TargetAppId=" + m_appId + "';</script>");
}
}
NET技術:SharePoint 2010中的單點登錄,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。