23

Web アプリの認証に ASP.NET メンバーシップを使用しています。これは私にとってうまくいきました。パスワードの有効期限を実装する必要があります。

パスワードの有効期限が切れている場合、ユーザーは画面にリダイレクトされChangePassword、パスワードを変更せずにアプリケーションの他の部分へのアクセスを許可されないようにする必要があります。

多くのaspxページがあります。解決策の 1 つは、パスワードの有効期限が切れた場合にすべての aspxのChangePassword画面にリダイレクトすることです。OnInit他の解決策や推奨事項はありますか。

ありがとう、ジェイ

4

6 に答える 6

29

csgeroの回答に加えて、ASP.Net 2.0 (3.5) では、このイベントのイベント ハンドラーを明示的に追加する必要がないことがわかりました。

次のメソッドを作成するだけでglobal.asax、自動的に接続されます。

void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
    if (this.User.Identity.IsAuthenticated)
    {
        // get user
        MembershipUser user = Membership.GetUser();

        // has their password expired?
        if (user != null
            && user.LastPasswordChangedDate.Date.AddDays(90) < DateTime.Now.Date
            && !Request.Path.EndsWith("/Account/ChangePassword.aspx"))
        {
            Server.Transfer("~/ChangePassword.aspx");
        }
    }
}
于 2011-07-15T09:29:36.030 に答える
13

global.asax に HttpApplication.PostAuthenticateRequest イベントのイベント ハンドラーを追加し、そこでリダイレクトを処理できます。

于 2008-12-08T14:17:29.427 に答える
9

Andrew の回答に加えて、ユーザーがまだパスワードの変更ページにいないことを確認する必要があることがわかりました。そうしないと、実際にパスワードを変更することができず、パスワードの変更サイトを離れることはありません。

void Application_PostAuthenticateRequest(object sender, EventArgs e)
    {
        if (this.User.Identity.IsAuthenticated)
        {
            // get user 
            MembershipUser user = Membership.GetUser();

            // has their password expired? 
            if (user != null
                && user.LastPasswordChangedDate.AddMinutes(30) < DateTime.Now
                && !Request.Path.EndsWith("/Account/ChangePassword.aspx"))
            {
                Server.Transfer("~/Account/ChangePassword.aspx");
            }
        }
    } 
于 2012-03-26T20:53:33.650 に答える
6

これを約 1 時間で実装するだけで、ベース ページを変更する必要はありません。あなたがしなければならないことは次のとおりです。

  1. LoggingInメンバーシップ コントロールのイベントに応答する

  2. メンバーシップ データベースでユーザーを検索し、取得します。LastPasswordChangedDate

  3. TimeSpan を使用して、これを現在の日付と比較し、必要な日数よりも前にパスワードが最後に変更されたかどうかを判断します。この値は web.config から取得します

  4. ChangePassword期限切れの場合、画面にリダイレクト

于 2009-07-24T13:59:32.743 に答える
4

これに対する解決策を探してここに来ましたが、現在のテクノロジは ASP.NET MVC です。他の人を助けるために、次のようにAuthorizeAttribute, and overrideOnAuthorizationメソッドを拡張できます。

public class ExpiredPasswordAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        IPrincipal user = filterContext.HttpContext.User;

        if(user != null && user.Identity.IsAuthenticated)
        {
            MembershipUser membershipUser = Membership.GetUser();

            if (PasswordExpired) // Your logic to check if password is expired...
            {
                filterContext.HttpContext.Response.Redirect(
                    string.Format("~/{0}/{1}?{2}", MVC.SGAccount.Name, MVC.SGAccount.ActionNames.ChangePassword,
                    "reason=expired"));

            }
        }

        base.OnAuthorization(filterContext);
    }
}

注:上記のコードでは、 T4MVCを使用してコントローラーとアクションの名前を取得しています。

" " を除くすべてのコントローラーをこの属性でマークしますAccountController。そうすることで、有効期限が切れたパスワードを持つユーザーはサイトを閲覧できなくなります。

これは、いくつかのボーナスポイントを付けて、この件に関して私が行った投稿です。

ASP.NET MVC のユーザー パスワード期限切れフィルター属性

于 2012-05-23T20:44:02.187 に答える