最近項目中發現,MOSS系統中的某些功能(如文檔管理等)非常不錯,決定進行現有系統進行集成。
現有系統基本情況:
- 用戶信息使用SQL Server 2005數據庫
- 使用表單方式進行登錄驗證
MOSS平臺的基本信息:
- 可使用Windows集成方式驗證
- 也可以使用.net類庫中的AspNetSqlMembershipProvider或ADMembershipProvider來實現Forms方式驗證。
如果要進行集成,首先應該解決的是兩平臺的用戶問題,及登錄驗證方式。一種辦法是將現有系統的用戶使用AD進行管理,使用windows集成方式進行驗證。另一種辦法是將MOSS因現有系統已上線運行一段時間、且用戶大多使用代理訪問此係統(代理服務器不支持NTLM協議,無法使用Windows集成方式驗證),所以只能使用第二種方法了。
步驟一:實現抽象類System.Web.Security.MembershipProvider,編碼自定義的Provider
namespace My.Security
{
/// <summary>
/// ADCMembershipProvider
/// </summary>
public class MyMembershipProvider : System.Web.Security.MembershipProvider
{
/// <summary>
/// 獲取一個成員資格用戶的集合,其中的電子郵件地址包含要匹配的指定電子郵件地址。
/// </summary>
/// <param name="emailToMatch">要搜索的電子郵件地址。</param>
/// <param name="pageIndex">要返回的結果頁的索引。<paramref name="pageIndex"/> 是從零開始的。</param>
/// <param name="pageSize">要返回的結果頁的大小。</param>
/// <param name="totalRecords">匹配用戶的總數。</param>
/// <returns>
/// 包含一頁 <paramref name="pageSize"/><see cref="T:System.Web.Security.MembershipUser"/> 對象的 <see cref="T:System.Web.Security.MembershipUserCollection"/> 集合,這些對象從 <paramref name="pageIndex"/> 指定的頁開始。
/// </returns>
public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
{
}
/// <summary>
/// 獲取一個成員資格用戶的集合,其中的用戶名包含要匹配的指定用戶名。
/// </summary>
/// <param name="usernameToMatch">要搜索的用戶名。</param>
/// <param name="pageIndex">要返回的結果頁的索引。<paramref name="pageIndex"/> 是從零開始的。</param>
/// <param name="pageSize">要返回的結果頁的大小。</param>
/// <param name="totalRecords">匹配用戶的總數。</param>
/// <returns>
/// 包含一頁 <paramref name="pageSize"/><see cref="T:System.Web.Security.MembershipUser"/> 對象的 <see cref="T:System.Web.Security.MembershipUserCollection"/> 集合,這些對象從 <paramref name="pageIndex"/> 指定的頁開始。
/// </returns>
public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
{
}
/// <summary>
/// 獲取數據源中的所有用戶的集合,並顯示在數據頁中。
/// </summary>
/// <param name="pageIndex">要返回的結果頁的索引。<paramref name="pageIndex"/> 是從零開始的。</param>
/// <param name="pageSize">要返回的結果頁的大小。</param>
/// <param name="totalRecords">匹配用戶的總數。</param>
/// <returns>
/// 包含一頁 <paramref name="pageSize"/><see cref="T:System.Web.Security.MembershipUser"/> 對象的 <see cref="T:System.Web.Security.MembershipUserCollection"/> 集合,這些對象從 <paramref name="pageIndex"/> 指定的頁開始。
/// </returns>
public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
{
}
/// <summary>
/// 從數據源獲取用戶的信息。提供一個更新用戶最近一次活動的日期/時間戳的選項。
/// </summary>
/// <param name="username">要獲取其信息的用戶名。</param>
/// <param name="userIsOnline">如果爲 true,則更新用戶最近一次活動的日期/時間戳;如果爲 false,則返回用戶信息,但不更新用戶最近一次活動的日期/時間戳。</param>
/// <returns>
/// 用數據源中指定用戶的信息填充的 <see cref="T:System.Web.Security.MembershipUser"/> 對象。
/// </returns>
public override MembershipUser GetUser(string username, bool userIsOnline)
{
}
/// <summary>
/// 根據成員資格用戶的唯一標識符從數據源獲取用戶信息。提供一個更新用戶最近一次活動的日期/時間戳的選項。
/// </summary>
/// <param name="providerUserKey">要獲取其信息的成員資格用戶的唯一標識符。</param>
/// <param name="userIsOnline">如果爲 true,則更新用戶最近一次活動的日期/時間戳;如果爲 false,則返回用戶信息,但不更新用戶最近一次活動的日期/時間戳。</param>
/// <returns>
/// 用數據源中指定用戶的信息填充的 <see cref="T:System.Web.Security.MembershipUser"/> 對象。
/// </returns>
public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
}
/// <summary>
/// 獲取與指定的電子郵件地址關聯的用戶名。
/// </summary>
/// <param name="email">要搜索的電子郵件地址。</param>
/// <returns>與指定的電子郵件地址關聯的用戶名。如果未找到匹配項,則返回 null。</returns>
public override string GetUserNameByEmail(string email)
{
}
/// <summary>
/// 驗證數據源中是否存在指定的用戶名和密碼。
/// </summary>
/// <param name="username">要驗證的用戶的名稱。</param>
/// <param name="password">指定的用戶的密碼。</param>
/// <returns>如果指定的用戶名和密碼有效,則爲 true;否則爲 false。</returns>
public override bool ValidateUser(string username, string password)
{
}
}
}
步驟二:將自定義的Provider類庫註冊到系統GAC,並在系統web.config中加入Provider配置
1.類庫註冊命令:gacutil.exe /i My.Security.dll (類庫必須簽名)
2.修改C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/CONFIG目錄下web.config 文件:
在<configuration>節點內添加<connectionStrings>節點配置數據庫連接 <connectionStrings> <add name="SQLConnString" connectionString="server=XXX;database=XXX;uid=XX;pwd=XXX;" /> </connectionStrings> 在<system.web>節點內添加<membership>節點和<roleManager>節點 <membership defaultProvider="MyMembershipProvider"> <providers> <add name="MyMembershipProvider" type="My.Security.MyMembershipProvider, My.Security,Version=1.0.0.0, Culture=neutral, PublicKeyToken=1cc46146f89bba24"/> </providers> </membership> |
步驟三:爲Sharepoint應用程序增加訪問SQLServer權限
修改C:/Program Files/Common Files/Microsoft Shared/web server extensions/12/CONFIG/ wss_minimaltrust.config,:
在第6行後增加以下: <SecurityClass Name="SqlClientPermission" Description="System.Data.SqlClient.SqlClientPermission, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 在第36行後增加以下 <IPermission class="SqlClientPermission" version="1" Unrestricted="true" /> |
步驟四:擴展現有Web應用程序
打開SharePoint管理中心網站->應用程序管理->創建或擴展WEB應用程序->擴展現有WEB應用程序:
端口:80
驗證提供程序:NTLM
允許匿名訪問:否
負載平衡URL區域:Internet
步驟四:設置Web應用程序的驗證方式及站點管理員
-
打開SharePoint管理中心網站->應用程序管理->驗證提供程序:確定當前web應用程序是80站點,點擊區域的Internet。
在編輯驗證頁面做以下修改並保存:
驗證類型:Forms
啓用匿名訪問:否
成員身份提供程序名稱:MyMembershipProvider
集成模式:集成
-
打開SharePoint管理中心網站->應用程序管理->網站集管理員:爲所有網站集設置好管理員。