2011-08-27 9 views
46

Korzystanie FormsAuthentication piszemy kod tak:Jak ręcznie utworzyć plik cookie uwierzytelniania zamiast domyślnej metody?

if (IsValidUser()) 
{ 
     FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 
     FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie); 
} 
  1. Jak można ręcznie utworzyć plik cookie uwierzytelniania zamiast pisać ?

  2. Jak zapisać adres URL przekierowania ze strony logowania w zmiennej tekstowej zamiast pisać FormsAuthentication.RedirectFromLoginPage(userName, createPersistentCookie)?

Odpowiedz

81

Proszę bardzo. ASP.NET dba o to, gdy używasz metod wyższego poziomu wbudowanych w FormsAuthentication, ale na niskim poziomie jest to wymagane do utworzenia pliku cookie uwierzytelniania.

if (Membership.ValidateUser(username, password)) 
{ 
    // sometimes used to persist user roles 
    string userData = string.Join("|",GetCustomUserRoles()); 

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
    1,          // ticket version 
    username,        // authenticated username 
    DateTime.Now,       // issueDate 
    DateTime.Now.AddMinutes(30),   // expiryDate 
    isPersistent,       // true to persist across browser sessions 
    userData,        // can be used to store additional user data 
    FormsAuthentication.FormsCookiePath); // the path for the cookie 

    // Encrypt the ticket using the machine key 
    string encryptedTicket = FormsAuthentication.Encrypt(ticket); 

    // Add the cookie to the request to save it 
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); 
    cookie.HttpOnly = true; 
    Response.Cookies.Add(cookie); 

    // Your redirect logic 
    Response.Redirect(FormsAuthentication.GetRedirectUrl(username, isPersistent)); 
} 

Nie jestem pewien, dlaczego chciałbyś zrobić tu coś niestandardowego. Jeśli chcesz zmienić implementację miejsca przechowywania danych użytkownika i sposób uwierzytelniania użytkowników, najlepiej jest utworzyć niestandardową MembershipProvider. Rolling własnego rozwiązania i bałagania z ciasteczka uwierzytelniania oznacza wysokie prawdopodobieństwo wprowadzenia luk w zabezpieczeniach oprogramowania.

Nie rozumiem Twojej części. 2. Musisz tylko wywołać FormsAuthentication.GetRedirectUrl, jeśli chcesz zwrócić użytkowników do strony, do której próbowali uzyskać dostęp, gdy zostali odesłani, aby się zalogować. Jeśli nie robisz tego, co chcesz, możesz przekierować do adresu URL zapisanego w konfiguracji, jeśli chcesz.

Aby odczytać plik cookie FormsAuthentication, zwykle należy podłączyć wydarzenie AuthenticateRequest do HttpModule lub Global.asax i skonfigurować kontekst użytkownika IPrinciple.

protected void Application_AuthenticateRequest(Object sender, EventArgs e) 
{ 
    HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
    if(authCookie != null) 
    { 
     //Extract the forms authentication cookie 
     FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); 

     // If caching roles in userData field then extract 
     string[] roles = authTicket.UserData.Split(new char[]{'|'}); 

     // Create the IIdentity instance 
     IIdentity id = new FormsIdentity(authTicket); 

     // Create the IPrinciple instance 
     IPrincipal principal = new GenericPrincipal(id, roles); 

     // Set the context user 
     Context.User = principal; 
    } 
} 
+0

ur odpowiedź pomaga mi ... może u proszę jaki kod muszę napisać do zapoznania się z zawartością pliku cookie uwierzytelniania po uwierzytelnieniu. FormsAuthentication.SetAuthCookie (userName, createPersistentCookie); SetAuthCookie utworzyć plik cookie uwierzytelniania i muszę napisać zawartość tego pliku cookie od strony serwera? możesz pomóc, proszę. thnx. :) – Thomas

+0

Czy możemy utworzyć plik cookie uwierzytelniania formularza od strony klienta za pomocą jquery? – Thomas

+3

Zaktualizowałem, aby pokazać również, jak możesz również odczytać plik cookie. Nie, nie możesz tego ustawić ze strony klienta, ponieważ może to stanowić zagrożenie dla bezpieczeństwa i nie będziesz w stanie wykonać szyfrowania wymagającego kluczy po stronie serwera. Plik cookie auth powinien zawsze być HttpOnly. Jedynym sposobem byłoby zrobienie żądania AJAX i zezwolenie na zapisanie pliku cookie po stronie serwera, w takim przypadku musisz upewnić się, że przekazujesz jakiekolwiek poświadczenia za pośrednictwem protokołu SSL. – TheCodeKing

-7

inny sposób tworzenia pliku cookie,

HttpCookie toolCookie = new HttpCookie("xyz"); 
toolCookie["UserName"] = userName; 
toolCookie["Password"] = StringCipher.Encrypt(password, "#!"); 
toolCookie.Expires = DateTime.Now.AddMinutes(chkRemember.Checked ? 30 : -30); 
Request.Cookies.Add(toolCookie); 

Reference

Get Istniejące dane ciasteczek

HttpCookie user = Request.Cookies["xyz"]; 
if(user != null) 
{ 
    string username = user["UserName"]; 
    string password = user["Password"] != null ? StringCipher.Decrypt(user["Password"], "#!") 
} 

o bezpieczeństwo danych to klasa statyczna.

Szyfrowanie i deszyfrowanie funkcja Encrypt & Decrypt

+10

Nigdy nie umieszczaj hasła w pliku cookie. To pokonuje cały punkt bezpiecznych plików cookie –

+0

czy możesz zaproponować mi optymalne rozwiązanie dla tego samego – Vijayaraghavan

+0

możesz sprawdzić ten przykład .. http://www.aspsnippets.com/Articles/Implement-Remember-Mfunkcjonalność-użytkownika-CheckBox- ASPNet.aspx – Vijayaraghavan

Powiązane problemy