ASP.NET でログイン コントロールを使用せずにカスタム MembershipProvider を使用する

StackOverflow https://stackoverflow.com/questions/41652

  •  09-06-2019
  •  | 
  •  

質問

カスタムがあります MembershipProviderASP.NET. 。ユーザーを検証できるシナリオは 2 つあります。

  1. ユーザーログイン経由 login.aspx ユーザー名/パスワードを入力してページを開きます。利用した ログイン制御 そしてそれを MyMembershipProvider. 。これは完全に正常に動作しています。

  2. 認証トークンは、別の Web サイトからクエリ文字列内の URL を介して渡されます。このために、私は1つのオーバーロードを持っています MembershipProvider.Validate(string authenticationToken), 、実際にユーザーを検証しています。この場合は使用できません ログイン制御. 。さて、同じものをどのように使用できますか MembershipProvider 実際に使用せずにユーザーを検証するには、 ログイン制御?電話してみました Validate 手動で行いますが、これではユーザーはサインインしません。

これが私が使用しているコードスニペットです

if (!string.IsNullOrEmpty(Request.QueryString["authenticationToken"])) {
    string ticket = Request.QueryString["authenticationToken"];
    MyMembershipProvider provider = Membership.Provider as MyMembershipProvider;
    if (provider != null) {
        if (provider.ValidateUser(ticket))
            // Login Success
        else
            // Login Fail
    }
}
役に立ちましたか?

解決

検証が成功したら、FormsAuthentication.Authenticate を呼び出してユーザーをサインインする必要があります。 http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.authenticate.aspx

編集:それは FormsAuthentication.SetAuthCookie です。http://msdn.microsoft.com/en-us/library/twk5762b.aspx

また、ユーザーを行きたい場所にリダイレクトするには、次のように呼び出します。FormsAuthentication.RedirectFromLoginPage: http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx

リンクテキスト

他のヒント

独自に設定することもできます FormsAuthenticationTicket 検証が成功した場合。

このようなもの;

if (provider != null) {
    if (provider.ValidateUser(ticket)) {
        // Login Success
        FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
            1, //version
            someUserName, //name
            DateTime.Now, //issue date
            DateTime.Now.AddMinutes(lengthOfSession), //expiration
            false, // persistence of login
            FormsAuthentication.FormsCookiePath
        );

        //encrypt the ticket
        string hash = FormsAuthentication.Encrypt(authTicket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);

        Response.Cookies.Add(cookie);
        Response.Redirect(url where you want the user to land);
    } else {
        // Login Fail  
    }   
}

認証情報を Cookie として直接保存する場合は正しいです。ただし、強力なハッシュ関数を使用します (例:MD5 + SHA1) は優れており安全です。ちなみに、セッション (これも単なるハッシュ Cookie) を使用する場合は、それに認証情報を添付できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top