8

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

  1. login.aspxユーザー名/パスワードを入力して、ページからユーザーがログインします。ログイン コントロールを使用し、MyMembershipProvider. これは完全に正常に機能しています。

  2. 認証トークンは、別の Web サイトからクエリ文字列の URL を介して渡されます。このためにMembershipProvider.Validate(string authenticationToken)、ユーザーを実際に検証する 1 つのオーバーロードが にあります。この場合、 Login コントロールは使用できません。Login コントロール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
    }
}
4

3 に答える 3

13

検証が成功したら、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を呼び出します。

リンクテキスト

于 2008-09-03T13:29:53.367 に答える
4

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  
    }   
}
于 2008-09-03T17:29:03.293 に答える
1

認証情報をCookieとして直接保存する場合は正しいです。しかし、強力なハッシュ関数 (MD5 + SHA1 など) を使用すると、優れた安全性が得られます。ちなみに、セッション (これも単なるハッシュ クッキー) を使用する場合は、認証情報を添付できます。

于 2011-04-18T05:30:01.547 に答える