2015-06-29 19 views
6

Đây là thiết lập của tôi:cửa hàng JWT thẻ trong cookie

  • 1 máy chủ xác thực mà đưa ra JWT mã thông báo thành công xác thực.
  • Nhiều máy chủ tài nguyên API cung cấp thông tin (khi người dùng được xác thực).

Bây giờ tôi muốn xây dựng giao diện người dùng ASP.NET MVC của mình. Tôi có nhận được mã thông báo mà tôi nhận được sau khi xác thực và đặt nó vào cookie để tôi có thể truy cập vào nó bằng mọi cuộc gọi được bảo đảm mà tôi cần phải thực hiện không? Tôi sử dụng DLL RestSharp để thực hiện các cuộc gọi http của mình. Nếu nó có lỗ hổng bảo mật thì tôi nên lưu mã thông báo của mình ở đâu?

Tôi sẽ sử dụng mã này cho cookie:

  System.Web.HttpContext.Current.Response.Cookies.Add(new System.Web.HttpCookie("Token") 
     { 
      Value = token.access_token, 
      HttpOnly = true 
     }); 
+0

đảm bảo nó cũng chỉ là HTTPS bằng cách thêm cờ an toàn! – Tilo

+0

[Trả lời] (http://stackoverflow.com/a/40376819/204699) với câu hỏi liên quan về vị trí lưu trữ mã thông báo trong ứng dụng trình duyệt có thể chứa thông tin bổ sung hữu ích. –

Trả lời

8

Bạn đang ở trên con đường đúng đắn! Cookie phải luôn có cờ HttpOnly, việc đặt cờ này sẽ ngăn chặn môi trường JavaScript (trong trình duyệt web) truy cập vào cookie. Đây là cách tốt nhất để ngăn chặn các cuộc tấn công XSS trong trình duyệt.

Bạn cũng nên sử dụng cờ Secure trong sản xuất để đảm bảo rằng cookie chỉ được gửi qua HTTPS.

Bạn cũng cần ngăn chặn các cuộc tấn công CSRF. Điều này thường được thực hiện bằng cách thiết lập một giá trị trong một cookie khác, mà phải được cung cấp trên mọi yêu cầu.

Tôi làm việc tại Stormpath và chúng tôi đã viết rất nhiều thông tin về bảo mật đầu cuối. Hai bài viết có thể hữu ích trong việc tìm hiểu tất cả các khía cạnh:

Token Based Authentication for Single Page Apps (SPAs)

https://stormpath.com/blog/build-secure-user-interfaces-using-jwts/

+0

Cảm ơn bạn vì thông tin! – Kaizer

+2

Cảm ơn thông tin. Bất kỳ kế hoạch để viết một cái gì đó về NET Identity 2.0 tích hợp? –

+0

@andrea: Đó là một sự theo dõi muộn, nhưng tôi vừa viết một bài viết về ASP.NET + Stormpath: https://stormpath.com/blog/10-minute-asp-net-user-authentication –

0

Bạn đang tạo JWTs của riêng bạn?

Nếu có, bạn nên xem xét sử dụng thuật toán ký dựa trên mã hóa không đối xứng, như "RS256" hoặc "RS512" - theo cách này bạn có thể xác minh xác nhận quyền sở hữu trong ứng dụng khách của mình mà không chia sẻ bí mật riêng tư.

Bạn có thực sự cần phải chuyển JWT vào Cookie không?

Có thể an toàn hơn khi chỉ đặt một id ngẫu nhiên trong Cookie, tham chiếu mã thông báo truy cập JWT và thực hiện phép thuật tham chiếu trên máy chủ phục vụ ứng dụng web của bạn.

+0

bạn có thể cung cấp một số mã, làm thế nào để bạn lưu trữ jwt trong cookie xin vui lòng? giả sử 'string token = YOUR_TOKEN', và bạn đang mã hóa trong lớp khởi động – sepehr

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