2013-05-08 31 views
0

在我的項目中,需要使用自定義對象來代替FormAuthenticationTicket。我們創建了一個具有與FormAuthenticationTicket相同屬性的自定義對象。現在我們使用我們自己的加密方法來加密這個自定義對象。我們已經成功創建了FormAuthentication cookie。但是當我們檢查context.User.Identity.IsAuthenticated屬性時,它始終是false。這是代碼。我們可以用表單驗證模塊中的自定義對象替換表單驗證票嗎?

CookieData cookieData = new CookieData(); 
    cookieData.ExpirationDate = DateTime.Now.AddMinutes(CookieConstants.DefaultFormsAuthTicketTimeout); 
    cookieData.LoginToken = LoginToken; 
    cookieData.Impersonate = (IsImpersonate ? true : false); 
    cookieData.IsPersistent = IsPersistent; 
    cookieData.UserData = "<<UserRelated Information>>"; 
    JavaScriptSerializer js = new JavaScriptSerializer(); 
    string strCookieData = js.Serialize(cookieData); 
    string encryptedTicket = AESEncryption.Encrpyt(strCookieData); 

    HttpCookie httpCookie = null; 
    httpCookie = new HttpCookie(cebCookie.Name, encryptedTicket); 



     if (cebCookie.IsPersistent) 
     { 
      httpCookie.Expires = cebCookie.Expires; 
     } 

     if (!string.IsNullOrEmpty(cebCookie.Url)) 
     { 
      httpCookie.Secure = cebCookie.RequireSSL; 
      httpCookie.Domain = cebCookie.Domain; 
     } 
     httpCookie.Path = FormsAuthentication.FormsCookiePath; 
     HttpContext.Current.Response.Cookies.Set(httpCookie); 

我知道這是一個有線需求。 請幫忙。

+1

爲什麼你會期望asp.net能夠理解你的定製票與它自己的加密方案?你故意讓一些不相容的東西,現在你感到驚訝,它不兼容? – 2013-05-08 04:49:14

回答

0

如果我正確理解您的要求,您需要使用身份驗證票證發送自定義數據?

如果你可以像下面這樣做。

想象一下,您需要發送follwing數據。

public class AuthUser 
    { 
     public int UserID { get; set; } 
     public string UserNo { get; set; } 
     public string UserName { get; set; } 
     public string Password { get; set; } 

     public override string ToString() 
     { 
      return UserID + "," + UserNo + "," + UserName + "," + Password; 
     } 
    } 

在您的登錄按鈕單擊事件。

AuthUser au = new AuthUser(); 
au.UserID = 1; 
au.UserNo = "001"; 
au.UserName = "chamara"; 
au.Password = "123"; 

string userData = au.ToString(); 

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(

      2,        // Version number 

      txtUserName.Text.Trim(),  // Username 

      DateTime.Now,     // Issue date 

      DateTime.Now.AddDays(555), // Expiration date 

      false,       // Persistent? 

      userData     // User data 

     ); 

檢索用戶數據

FormsIdentity id = (FormsIdentity)Context.User.Identity; 
FormsAuthenticationTicket ticket = id.Ticket; 
string[] UserData = ticket.UserData.Split(','); 
+0

感謝您的快速響應。我認爲在我的問題中,我無法正確解釋我的要求。我們的要求是使用自定義對象來代替身份驗證票證。我們不想在創建表單身份驗證Cookie時使用表單身份驗證票證。我們能夠使用自定義對象創建表單身份驗證Cookie,但「context.User.Identity.IsAuthenticated」始終保持爲false。 – Sandeep 2013-05-08 05:24:00