2013-11-26 14 views
5

Có một số chủ đề tương tự ở đây trong Stackflow nhưng tôi thấy không ai trong số họ đã trả lời câu hỏi của tôi.Mã thông báo truy cập API Web sẽ được lưu trữ như thế nào?

ASP.NET Web API 2 là những gì chúng tôi sử dụng ngay bây giờ. Tôi hiện có thể chấp nhận yêu cầu xác thực CORS từ WebAPI của tôi. Với mã thông báo truy cập được gửi cùng trong tiêu đề Authorization (Gấu xxx), tôi có thể truy cập các tài nguyên được bảo vệ bởi [Authorize] thẻ.

Vấn đề là, làm cách nào để triển khai chức năng tương tự hộp kiểm "Nhớ thông tin đăng nhập của tôi" trong biểu mẫu đăng nhập thông thường? Tất cả những gì chúng tôi muốn là người dùng không cần phải đăng nhập lại lần sau khi truy cập trang web của chúng tôi. Mã thông báo truy cập chỉ cho một phiên không? Làm cách nào để WebAPI2 đặt hết hạn mã thông báo? Làm cách nào chúng tôi có thể lưu một số thông tin trong phiên hoặc sử dụng bộ nhớ cục bộ để lưu trữ thông tin xác thực như vậy? Khi chúng tôi lưu trữ mã thông báo này ở phía máy khách, chúng tôi có cần một số loại mã hóa để bảo vệ nó không?

Đề xuất của bạn trong việc triển khai chức năng "Nhớ thông tin đăng nhập của tôi" là gì?

+0

Cảm ơn bạn đã chỉnh sửa, b__. – Blaise

Trả lời

4

Nhà cung cấp xác thực của bạn nên cung cấp cho bạn chức năng để thực hiện việc này. Việc này rất đơn giản nếu bạn sử dụng nhà cung cấp thành viên ASP.Net:

FormsAuthentication.RedirectFromLoginPage(strUserName, true); 

"Đúng" ở trên, đặt cookie lâu dài.

Khi bạn sử dụng CORS và gửi cookie xác thực cho WebApi của bạn, WebApi không quan tâm liệu xác thực có từ cookie "Nhớ thông tin đăng nhập của tôi" cũ hay từ thông tin đăng nhập mới. Tất cả những gì bạn quan tâm là giá trị cookie được truyền trong tiêu đề Cấp phép hợp lệ.

Đối với mã hóa cookie, đây cũng là điều mà nhà cung cấp xác thực của bạn sẽ đưa bạn ra khỏi hộp.

+0

Cảm ơn câu trả lời. Chúng tôi đang sử dụng CORS và mã thông báo truy cập phải được lưu trữ ở phía máy khách, chỉ là HTML và JavaScript. Dường như bạn đề xuất lưu trữ mã thông báo bên trong cookie, phải không? – Blaise

+0

Vâng, đó là những gì tôi đang làm. Tôi cần thêm bây giờ rằng chúng tôi đang sử dụng một STS tập trung sử dụng chứng chỉ để mã hóa mã thông báo xác thực. Nó là vô ích nếu không có chứng chỉ giải mã trên máy khách. Vì vậy, đây là lý do tại sao nó không phải là vấn đề đối với tôi để sử dụng một cookie cho việc này, và nó cho phép tôi sử dụng giải pháp out-of-the-box cho việc này. Nếu bạn không muốn điều này, bạn có thể xem ThinkTecture.com. Những người này có một giải pháp cho phép bạn gửi một mã thông báo Json để xác thực Cors. – Morten

+0

Cảm ơn. sao tôi có thể biết "STS tập trung" nào bạn đang sử dụng? – Blaise

6

"Vấn đề là, làm thế nào tôi có thể thực hiện một chức năng tương tự như một 'Remember me' hộp kiểm trong biểu mẫu đăng nhập thường xuyên?"

Lưu token trong localStorage clientside khi "Remember me" được chọn => Khi tab/trình duyệt được đóng, mã thông báo vẫn còn hoạt động và lần tiếp theo bạn được tự động đăng nhập

Lưu mã thông báo trong bộ nhớ phiên khách hàng khi "Nhớ thông tin đăng nhập của tôi" không được chọn => Mỗi khi bạn đóng tab/trình duyệt bộ nhớ phiên bị xóa. Lần sau bạn kiểm tra mã thông báo nó không tồn tại. Do đó, bạn phải đăng nhập lại ...

"Tất cả những gì chúng tôi muốn là người dùng không cần phải đăng nhập lại lần sau khi truy cập trang web của chúng tôi".

Xem câu trả lời ở trên!

Chỉ có mã thông báo truy cập cho một phiên không?

CÓ một tab trong trình duyệt là một phiên.

WebAPI2 đặt hết hạn mã thông báo như thế nào?

Bạn đặt thời gian khi mã thông báo hết hạn!

Cách chúng tôi có thể lưu một số thông tin trong phiên hoặc sử dụng bộ nhớ cục bộ để lưu trữ thông tin xác thực như vậy?

Chỉ lưu trữ thẻ được mã hóa về phía khách hàng không bao giờ userid/mật khẩu

Khi chúng tôi lưu trữ thẻ này ở phía khách hàng, chúng ta cần một số loại mã hóa để bảo vệ nó?

Mã thông báo được mã hóa ở phía máy chủ sau đó được gửi tới máy khách cho mọi yêu cầu. Máy khách không cần đọc mã thông báo. Khách hàng chỉ cần gửi nó với yêu cầu everry thats it.

+2

Tôi biết câu hỏi và câu trả lời là cũ, nhưng vẫn còn: Vấn đề với sessionStorage là nó không liên tục giữa các tab của cùng một trình duyệt. Nếu người dùng cố gắng thậm chí mở một tab/cửa sổ mới từ liên kết mà không làm mất công việc anh ta đang làm trên tab/cửa sổ hiện tại, ứng dụng sẽ yêu cầu đăng nhập lại vì tab/cửa sổ mới sẽ không có đối tượng sessionStorage nữa ... – CesarD

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