2011-12-27 42 views
6

Tôi biết nhà cung cấp thành viên lưu trữ tên người dùng và thời gian hết hạn trong cookie được mã hóa và sau đó sử dụng để xác minh người dùng vẫn đăng nhập một phiên.Mật khẩu người dùng ASP.Net Store trong cookie phiên?

Có thể lưu trữ mật khẩu người dùng trong cookie được mã hóa này không. Nếu vậy làm thế nào bạn sẽ truy cập vào phía máy chủ?

Tôi cần tên người dùng và mật khẩu của máy chủ có sẵn bởi vì tôi cần gọi các dịch vụ web sử dụng cùng thông tin đăng nhập đó. Có cách nào tốt hơn để làm điều này?

Trả lời

10

Bạn nên lưu trữ trong trạng thái phiên, không bao giờ rời khỏi máy chủ.

Bạn cũng nên cố gắng thay đổi các dịch vụ web đó để sử dụng vé xác thực thay vì mật khẩu (ví dụ: OAuth), vì bạn không nên lưu trữ mật khẩu ở dạng văn bản thuần túy.

+2

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. –

+0

@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

+0

Trạng thái phiên làm việc trong môi trường nhiều máy chủ? –

2

Không được đề xuất nhưng bạn có thể sử dụng FormsAuthenticationTicket.UserData.

+0

Theo như tôi có thể nói không phải là cùng một điều SLaks được giới thiệu? Tôi không thực sự hiểu sự khác biệt giữa phiên được cung cấp thành viên và "trạng thái phiên". Có lẽ không có sự khác biệt và đó là điều làm tôi khó hiểu. –

+0

@metalideath. Cookie phiên rất khác với Cookie xác thực biểu mẫu. Đọc chương "Xác thực Mẫu" của sách Stefan Schackow để hiểu đầy đủ. –

+0

@metalideath: Thao tác này sẽ chuyển trực tiếp vào cookie xác thực biểu mẫu trên máy khách. Tôi sẽ không giới thiệu nó. – SLaks

3

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ó).

+0

Cảm ơn ví dụ về việc sử dụng trạng thái phiên, +1 cho rằng . –

Các vấn đề liên quan