Có, bạn có thể làm điều đó. Bạn vượt qua các thông tin được mã hóa trong lĩnh vực userData của các nhà xây dựng FormsAuthenticationTicket:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(version,
name, issueDate, expirationDate, isPersistent, yourEncodedData);
string secureTicket = FormsAuthentication.Encrypt(ticket);
Response.Cookies.Add(
new HttpCookie(FormsAuthentication.FormsCookieName, secureTicket));
Lý tưởng nhất, điều này sẽ được thực hiện qua một kết nối SSL, và cookie vé nên được đánh dấu với cả HttpOnly và an toàn các thuộc tính.
Sau đó, để lấy giá trị:
FormsIdentity id = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string yourEncodedInfo = ticket.UserData;
Bạn cũng có thể chỉ cần đặt cookie riêng của mình, tách biệt với vé các hình thức auth.
Tuy nhiên, lưu trữ mật khẩu trực tiếp trong cookie, ngay cả khi được mã hóa, không phải là ý tưởng tốt từ quan điểm bảo mật. Thay vào đó, hãy sử dụng trạng thái Phiên:
Session["password"] = password;
Trạng thái phiên cũng sử dụng cookie nhưng bản thân cookie chỉ chứa khóa. Máy chủ sử dụng khóa để lấy từ điển các cặp khóa/giá trị duy nhất cho phiên đó, nằm trên máy chủ (hoặc được đăng theo tuần tự đến DB, tùy thuộc vào cách cấu hình nó).
Tôi có lưu chúng vào trạng thái phiên khi người dùng được xác thực lần đầu tiên không? Làm cách nào để đảm bảo phiên thành viên hết hạn cùng một lúc với trạng thái phiên? Tôi sẽ cần họ ở lại đồng bộ tôi tin. –
@metalideath - Có, lưu trữ chúng ngay sau khi bạn có thể. Nếu phiên kết thúc, hoặc do người dùng xóa cookie của họ (và do đó mất mọi tham chiếu đến phiên của họ) hoặc thời gian máy chủ trong phiên, bạn sẽ cần phải xác thực lại người dùng và khôi phục mật khẩu trong phiên một lần nữa. – Omar
Trạng thái phiên làm việc trong môi trường nhiều máy chủ? –