MOSS與業務系統的集成 之 自定義Membership實現Forms方式驗證

 

最近項目中發現,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應用程序的驗證方式及站點管理員

  1. 打開SharePoint管理中心網站->應用程序管理->驗證提供程序:確定當前web應用程序是80站點,點擊區域的Internet。

    在編輯驗證頁面做以下修改並保存:

    驗證類型:Forms

    啓用匿名訪問:否

    成員身份提供程序名稱:MyMembershipProvider

    集成模式:集成

  2. 打開SharePoint管理中心網站->應用程序管理->網站集管理員:爲所有網站集設置好管理員。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章