2013-08-28 36 views
5

このような機能を実装する必要があります。 パスワードを最後に変更してからx日後にログインしたときに、パスワードの有効期限が切れたことを知らせるメッセージが表示されたら、新しいパスワードを入力して新しいパスワードを確認してください。Sitecore強制パスワード変更

アイデア/提案どのように適切な方法でそれを行うには?

+0

CMSユーザーまたはウェブサイトユーザーをチェックしていますか? –

+0

こんにちは私はCmsユーザーをチェックしています。 –

答えて

5

あなたはProcess方法とlogginginパイプラインの最初のプロセッサとして独自のプロセッサを追加することができます

public void Process(LoggingInArgs args) 
{ 
    MembershipUser user = Membership.GetUser(args.Username); 
    if (user != null) 
    { 
     DateTime date = user.LastPasswordChangedDate; 
     if ((DateTime.Now - date).TotalDays > maxDaysWithoutPasswordChange) 
     { 
      HttpContext.Current.Response.Redirect("/passwordchangepage"); 
     } 
    } 
} 

これは/passwordchangepage URLにパスワードの変更を必要とするすべてのユーザーをリダイレクトします。このページでは、古いパスワードと新しいパスワードのフォームを作成します。フォームは、パスワードの変更を実行して提出するには

MembershipUser user = Membership.GetUser(username); 
user.ChangePassword(oldPassword, newPassword); 
0

サイトコアのセキュリティモデルは、実際にもこのような機能を持っていないASP.NET 1、に基づいています。これは、一般的なASP.NET機能のカスタマイズのように見えますが、実際にはSitecoreには関係しません。しかし、私はこれを実装する方法のいくつかの提案をあなたに提供することができます。

ユーザープロファイルの2つのプロパティを作成できます.1つは有効期限(またはweb.configでの設定)、もう1つは最後にパスワードを更新する日付です。次に、認証ロジックを少し変更する必要があります。

まず、ユーザーが認証される前に、ログインフォームで指定されたユーザーの新しいカスタムフィールドの値を確認する必要があります。次に、パスワードが期限切れになった場合は、ユーザーに変更を依頼します。「古いパスワード」、「新しいパスワード」、「新しいパスワードの確認」の3つのフィールドを含むフォームにリダイレクトします。

これらの3つの値を持つと、適切なMemberhipUserクラスのメソッドを使用してユーザーパスワードを変更できます。パスワードを変更すると、ユーザーを認証できます。

3

私はthis投稿を使って、最近のプロジェクトで同じ機能を実装しました。

これは、必要なコードを完全に実行し、新しいファイルPipelineにパッチを適用するための設定ファイルを作成する方法を示します。また、パスワードリセットページのパラメータと、パスワードを期限切れにするx日を作成します。

public class CheckPasswordExpiration 
    { 
     private TimeSpan TimeSpanToExpirePassword { get; set; } 
     private string ChangePasswordPageUrl { get; set; } 

     public void Process(LoggingInArgs args) 
     { 
      Assert.ArgumentNotNull(args, "args"); 
      if (!IsEnabled()) 
      { 
       return; 
      } 

      MembershipUser user = GetMembershipUser(args); 
      if (HasPasswordExpired(user)) 
      { 
       WebUtil.Redirect(ChangePasswordPageUrl); 
      } 
     } 

     private bool IsEnabled() 
     { 
      return IsTimeSpanToExpirePasswordSet() && IsChangePasswordPageUrlSet(); 
     } 

     private bool IsTimeSpanToExpirePasswordSet() 
     { 
      return TimeSpanToExpirePassword > default(TimeSpan); 
     } 

     private bool IsChangePasswordPageUrlSet() 
     { 
      return !string.IsNullOrWhiteSpace(ChangePasswordPageUrl); 
     } 

     private static MembershipUser GetMembershipUser(LoggingInArgs args) 
     { 
      Assert.ArgumentNotNull(args, "args"); 
      Assert.ArgumentNotNullOrEmpty(args.Username, "args.Username"); 
      return Membership.GetUser(args.Username, false); 
     } 

     private bool HasPasswordExpired(MembershipUser user) 
     { 
      return user.LastPasswordChangedDate.Add(TimeSpanToExpirePassword) <= DateTime.Now; 
     } 
    } 
1

私の特定の状況では、顧客はsitecoreパスワードリセットツールを使用したくなかった。私は自分のサイトコアWebサイトのビジュアルスタジオソリューションを作成し、ブランド変更パスワードページを作成しました。私がこのページを手に入れたら、VSソリューションのGlobal.asaxに次のものを置いた。

protected void Application_PostAuthenticateRequest(object sender, EventArgs e) 
    { 
     if (this.User.Identity.IsAuthenticated) 
     { 
      // Get the user as they log in 
      MembershipUser user = Membership.GetUser(); 

      // if the user is not blank 
      // and the password expiry date is less than the password policy expiration date 
      // and the user is not directly calling the change password page 
      if (user != null && user.LastPasswordChangedDate.Date.AddDays(90) < DateTime.Now.Date && !Request.Path.EndsWith("/layouts/changepw.aspx")) 
      { 
       // Then transfer to the change password page 
       Server.Transfer("~/layouts/changepw.aspx"); 
      } 
     } 
    } 

パスワード変更ページが表示されると、ログインページやウェブサイトから送信されたかどうかを確認しました。 URLリファラーに応じて、適切な「パスワードはすぐに期限切れになります」というメッセージが表示されました。

関連する問題