MOSS与业务系统的集成 之 自定义Membership实现Forms方式验证

本文介绍如何通过自定义MembershipProvider实现MOSS与现有业务系统的集成,特别关注使用Forms方式进行验证的过程。包括自定义Provider的编码实现、系统配置、权限设置及Web应用程序的扩展。

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管理中心网站->应用程序管理->网站集管理员:为所有网站集设置好管理员。

 

from:http://www.cnblogs.com/CSharp/archive/2008/08/05/1261074.html

内容概要:本文深入剖析了HTTPS中SSL/TLS握手的全流程,系统讲解了HTTPS的诞生背景及其相较于HTTP在安全性上的优势,重点阐述了SSL/TLS握手各阶段的技术细节,包括ClientHello、ServerHello、证书交换、密钥交换及加密通信建立等环节。文章结合加密基础概念(对称加密、非对称加密、哈希算法)和数字证书机制,解释了数据加密、身份验证完整性保护的实现原理,并通过Wireshark抓包实例帮助读者直观理解握手过程中的数据交互。同时,归纳了常见握手失败问题及其解决方案,最后对SSL/TLS未来发展趋势进行了展望,涵盖抗量子加密算法和高效协议优化方向。; 适合人群:具备基本网络和安全知识的开发人员、运维工程师、网络安全爱好者,以及希望深入理解HTTPS底层机制的技术从业者;尤其适合1-3年经验、正在向中高级岗位发展的技术人员。; 使用场景及目标:①掌握HTTPS工作原理及SSL/TLS握手全过程,理解加密通信建立机制;②能够分析和排查HTTPS连接中的证书、加密套件、版本兼容等问题;③通过抓包实践提升对网络安全协议的实际分析能力;④为后续学习TLS 1.3、零RTT、前向保密等高级主题打下坚实基础; 阅读建议:此资源理论实践结合紧密,建议在学习过程中同步使用Wireshark等工具进行抓包实验,对照文档中的握手阶段逐一验证各消息内容,加深对加密协商、证书验证和密钥生成过程的理解。同时关注最新TLS版本的发展趋势,拓展安全视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值