2008-09-03 83 views
8

我們在ASP.NET中有一個自定義MembershipProvider。現在有2種可能情景的用戶可以驗證:在ASP.NET中使用不帶登錄控件的自定義MembershipProvider

  1. 用戶通過登錄頁面login.aspx通過輸入自己的用戶名/密碼。我已使用登錄控制並將其與MyMembershipProvider關聯。這工作得很好。

  2. 身份驗證令牌通過查詢字符串中的某個URL傳遞,形成不同的網站。爲此,我在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 
    } 
} 

回答

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

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 2012-07-17 03:13:12

1

對於將身份驗證信息直接存儲爲cookie的情況,您是正確的。但是使用強大的散列函數(例如MD5 + SHA1)非常安全。 順便說一句,如果你使用會話(這也只是一個哈希cookie),你可以將auth信息附加到它。

相關問題