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;
}
}
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
Czy możemy utworzyć plik cookie uwierzytelniania formularza od strony klienta za pomocą jquery? – Thomas
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