2008-09-03 12 views
8

MembershipProviderASP.NETにあります。自分のユーザー名/パスワードを入力してlogin.aspxページを経由してASP.NETでのログインコントロールなしのカスタムMembershipProviderの使用

  1. ユーザーログイン:今すぐ2の可能なシナリオは、ユーザーが検証することができますがあります。私はログインコントロールを使用し、MyMembershipProviderとリンクしています。これは完璧に動作しています。

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

答えて

13

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

EDITは: http://msdn.microsoft.com/en-us/library/twk5762b.aspx

:それはFormsAuthentication.SetAuthCookieです

また、呼び出し、バック彼が行きたかった場所のユーザーをリダイレクトする:FormsAuthentication.RedirectFromLoginPage:http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.redirectfromloginpage.aspx

link text

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 
    } 
} 
+0

私は実際に認証がどのように機能しているかを知ろうとしています。ありがとうございました。それは私をたくさん助けてくれました – Krishh

1

認証情報をクッキーとして直接格納する場合は正しいです。しかし、強力なハッシュ関数(例:MD5 + SHA1)を使用すると効果的です ところで、セッション(ハッシュクッキーでもあります)を使用する場合は、認証情報をそれに添付することができます。

関連する問題