设为首页 收藏本站
查看: 1199|回复: 0

[经验分享] 【原创】在基于Form验证的SharePoint网站中实现用户口令过期策略

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-24 12:42:42 | 显示全部楼层 |阅读模式
  最近,公司有一个项目,是基于SharePoint的一个网站,采用Form验证,验证提供程序采用SqlMenbershipProvider。完成后交给用户测试,用户又提出新要求:要实现口令30天过期功能,超过30天的用户登录后自动跳转至口令修改页面修改口令。这个功能还没有现成的方案,只好自己动手了。下面详细介绍实现过程。
  环境:MOSS2007+SQL Server 2005
  准备工作:
  1.              配置一个Form验证的SharePoint网站,要SSL加密(可选)。网上有很多文章参考,这里给出最早的一篇中文文章,表示对作者的尊重:《一步一步SharePoint 2007之十一:实现Form认证(1)—(5)》,作者Eallies。
  2.              配置好Form验证后还需要给用户提供一个用户管理工具,总不能让用户使用Visual Studio的工具,最好是集成在SharePoint里面的。在网上搜了一下,还真在codeplex网站上找着了:《Forms Base Authentication Tools and Utils for SharePoint 2007》。虽然很简单,但已经够用。
  3.              还差一个用户自己修改口令的功能,正好codeproject网站上有一个现成的方案:《MOSS Change Password Feature for FBA》。不用自己动手了(真懒!)。
  
  如何实现用户口令过期策略呢?查了一下资料,MembershipUser类有一个属性LastPasswordChangedDate可以利用,这个属性记录用户上一次更改口令的时间。思路是这样的,在用户登录时检查LastPasswordChangedDat属性值,如果超过口令存活期(如30天)就重定向到口令修改页面。程序如下(将下面程序插入到login.aspx中):
注意:不建议直接修改LAYOUTS目录下的原login.aspx文件,因为那样会影响其它应用程序。建议在LAYOUTS目录下新建一目录,将login.aspx文件复制过来,修改这个文件,并修改web.config文件,将登录页面指向这个文件。

DSC0000.gif DSC0001.gif Code
<script runat="server">
protected override void OnLoad(EventArgs e)
{
login.Authenticate += new AuthenticateEventHandler(login_Authenticate);
base.OnLoad(e);
}
private void login_Authenticate(object sender, System.Web.UI.WebControls.AuthenticateEventArgs e)
{
    if (Membership.ValidateUser (login.UserName, login.Password))
    {
    int DefaultPasswordExpiryInDays = 30;
    MembershipUser usrInfo = Membership.GetUser(login.UserName);
    int daysSincePwdChange = Convert.ToInt32(DateTime.Now.Subtract(usrInfo.LastPasswordChangedDate).TotalDays);
   
    if(daysSincePwdChange<DefaultPasswordExpiryInDays)
            FormsAuthentication.RedirectFromLoginPage (login.UserName, false);
    else
        {
            FormsAuthentication.SetAuthCookie(login.UserName, false);
            Response.Redirect("~/_layouts/ChangePassword.aspx");
        }
    }
    else   
       login.FailureText = "Login failed. Please try again.";
}
</script>
    上面这段程序基本实现了超过30天的用户登录后自动跳转至口令修改页面的功能。但考虑根据以下问题做进一步完善。
  1.      将口令存活期(如90天)作为系统参数,让管理员随意修改。方法是可以将这个参数存储在Web.config文件中,程序自动读取该参数;
  2.      口令超期后自动跳转至口令修改页面时,该页面应该显示&#8220;Your Password Has Expired&#8221;,以区别主动修改口令的页面。方法是在口令修改页面中添加一个Panel,内容是显示&#8220;Your Password Has Expired&#8221;,通过Request.QueryString["status"]判断是口令超期时则显示此Panel,否则不显示。
  
  实施步骤:
  在web.config文件中的<appSettings>下面插入一行:
  <add key="PasswordExpiryInDays" value="90" />
  web.config文件应该在&#8220;c:\Inetpub\wwwroot\wss\VirtualDirectories\[应用程序端口]&#8221;目录。
  修改login.aspx中的程序:

Code
<script runat="server">
protected override void OnLoad(EventArgs e)
{
login.Authenticate += new AuthenticateEventHandler(login_Authenticate);
base.OnLoad(e);
}
private void login_Authenticate(object sender, System.Web.UI.WebControls.AuthenticateEventArgs e)
{
    if (Membership.ValidateUser (login.UserName, login.Password))
    {
    int DefaultPasswordExpiryInDays = 30;
    String PasswordExpiryInDays=ConfigurationManager.AppSettings["PasswordExpiryInDays"];
    if(!String.IsNullOrEmpty(PasswordExpiryInDays))
        DefaultPasswordExpiryInDays=Convert.ToInt32(PasswordExpiryInDays);
        
    MembershipUser usrInfo = Membership.GetUser(login.UserName);
    int daysSincePwdChange = Convert.ToInt32(DateTime.Now.Subtract(usrInfo.LastPasswordChangedDate).TotalDays);
    if(daysSincePwdChange<DefaultPasswordExpiryInDays)
            FormsAuthentication.RedirectFromLoginPage (login.UserName, false);
    else
        {
            FormsAuthentication.SetAuthCookie(login.UserName, false);
            Response.Redirect("~/_layouts/ChangePassword.aspx?status=expired");
        }
    }
    else   
       login.FailureText = "Login failed. Please try again.";
}
</script>
  将ChangePassword.aspx文件改为:

Code
<%@ Page Language="C#" Inherits="System.Web.UI.Page" MasterPageFile="~/_layouts/simple.master"  %>
<asp:Content ID="Content1" ContentPlaceHolderId="PlaceHolderMain" runat="server">
        <asp:Panel ID="pnlPasswordExpired" Visible="false" runat="server">
            <p><b style="color: red">Your Password Has Expired</b></p>
            </p>
        </asp:Panel>
        <asp:ChangePassword id="ChangePassword1" DisplayUserName="false" newpasswordregularexpressionerrormessage="Error: Your password must be at least 7 characters long, and contain at least one number and one special character."  runat ="server"
        CancelDestinationPageUrl="~/_layouts/DEVX/login.aspx" ContinueDestinationPageUrl="~/pages/default.aspx" ></asp:ChangePassword>
</asp:Content>
<script runat="server">
protected void Page_Load(Object sender, EventArgs e)
{
String st=Request.QueryString["status"];
if(! String.IsNullOrEmpty(st) && st.Equals("expired"))
    pnlPasswordExpired.Visible = true;
}
</script>下面是测试截图.
DSC0002.jpg
DSC0003.jpg
源码下载:passwordExpired.rar
  参考资料
  [1].    《一步一步SharePoint 2007之十一:实现Form认证(1)&#8212;(5)》, Eallies, http://www.cnblogs.com/Eallies/archive/2006/08/11/474559.html
  [2].    Forms Base Authentication Tools and Utils for SharePoint 2007, stacyDraper, http://fba.codeplex.com/Wiki/View.aspx?title=basic%20FBA%20user%20and%20role%20management
  [3].    MOSS Change Password Feature for FBA, Akrumooz ,  http://www.codeproject.com/KB/sharepoint/moss_fba_changepassword.aspx
  [4].    《Examining ASP.NET's Membership, Roles, and Profile - Part 16, Scott Mitchell, http://www.4guysfromrolla.com/articles/070809-1.aspx

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-118230-1-1.html 上篇帖子: Sharepoint学习笔记—使用 Stsadm Installing或 Uninstalling features 下篇帖子: 一步一步SharePoint 2007之二:配置SharePoint
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表