2013-07-21 41 views
108

Ai đó có thể cho tôi mô tả từng bước về cách xác thực dựa trên cookie hoạt động không? Tôi chưa bao giờ làm bất cứ điều gì liên quan đến xác thực hoặc cookie. Trình duyệt cần phải làm gì? Máy chủ cần làm gì? Theo thứ tự? Làm cách nào để giữ mọi thứ an toàn?Xác thực dựa trên cookie hoạt động như thế nào?

Tôi đã đọc về các loại xác thực khác nhau và về cookie nhưng tôi muốn mô tả cơ bản về cách sử dụng cả hai cùng nhau- Tôi chỉ đọc rằng chúng thường được sử dụng cùng nhau nhưng không thể tìm thấy mô tả làm sao.

+3

http://www.howstuffworks.com/cookie.htm – Cyclonecode

+0

bài viết này có thể giúp: http://www.yegor256.com/2015/05/18/cookie-based-authentication.html – yegor256

Trả lời

93

Cookie về cơ bản chỉ là một mục trong từ điển. Mỗi mục có một khóa và một giá trị. Để xác thực, khóa có thể giống như 'tên người dùng' và giá trị sẽ là tên người dùng. Mỗi khi bạn yêu cầu một trang web, trình duyệt của bạn sẽ bao gồm các cookie trong yêu cầu và máy chủ lưu trữ sẽ kiểm tra cookie. Vì vậy, xác thực có thể được thực hiện tự động như thế.

Để đặt cookie, bạn chỉ cần thêm cookie vào phản hồi mà máy chủ gửi lại sau khi yêu cầu. Sau đó trình duyệt sẽ thêm cookie khi nhận được phản hồi.

Có các tùy chọn khác nhau mà bạn có thể định cấu hình cho phía máy chủ cookie, như thời gian hết hạn hoặc mã hóa. Cookie được mã hóa thường được gọi là cookie đã ký. Về cơ bản, máy chủ mã hóa khóa và giá trị trong mục từ điển, do đó chỉ máy chủ mới có thể sử dụng thông tin. Vì vậy, sau đó cookie sẽ được an toàn.

Trình duyệt sẽ lưu cookie do máy chủ đặt. Trong tiêu đề HTTP của mọi yêu cầu mà trình duyệt tạo cho máy chủ đó, trình duyệt sẽ thêm cookie. Nó sẽ chỉ thêm cookie cho các miền đã đặt chúng. Example.com có ​​thể đặt cookie và cũng thêm tùy chọn trong tiêu đề HTTP để trình duyệt gửi cookie trở lại tên miền phụ, như sub.example.com. Nó sẽ không thể chấp nhận được đối với một trình duyệt để gửi cookie đến một miền khác.

+0

gì tôi hiểu là trình duyệt có thể gửi cookie trở lại cùng một tên miền. Liên quan đến điều đó, trình duyệt có sử dụng tên miền phụ trong tài khoản khi phân biệt giữa hai tên miền không? – Aakash

+1

Bạn có thể đặt tùy chọn trong tiêu đề HTTP để biết trình duyệt xử lý tên miền phụ như thế nào. –

151

Tôi nhận ra đây là năm muộn, nhưng tôi nghĩ tôi có thể mở rộng câu trả lời của Conor và thêm một chút nữa vào cuộc thảo luận.

Ai đó có thể cho tôi mô tả từng bước về cách xác thực dựa trên cookie hoạt động không? Tôi chưa bao giờ làm bất cứ điều gì liên quan đến xác thực hoặc cookie. Trình duyệt cần phải làm gì? Máy chủ cần làm gì? Theo thứ tự? Làm cách nào để giữ mọi thứ an toàn?

Bước 1: Khách hàng> Đăng ký

Trước khi bất cứ điều gì khác, người dùng phải đăng ký. Máy khách gửi yêu cầu HTTP tới máy chủ có chứa tên người dùng và mật khẩu của họ.

Bước 2: Server> Xử lý đăng ký

Server nhận yêu cầu này và băm mật khẩu trước khi lưu trữ tên người dùng và mật khẩu trong cơ sở dữ liệu của bạn. Bằng cách này, nếu ai đó có quyền truy cập vào cơ sở dữ liệu của bạn, họ sẽ không thấy mật khẩu thực của người dùng của bạn.

Bước 3: Khách hàng> Người dùng đăng nhập

Bây giờ người dùng đăng của bạn trong Ông/bà cung cấp tên tài khoản/mật khẩu và một lần nữa, điều này được đăng tải như một yêu cầu HTTP đến máy chủ..

Bước 4: Server> Members đăng nhập

Máy chủ nhìn lên tên người dùng trong cơ sở dữ liệu, băm mật khẩu đăng nhập được cung cấp, và so sánh nó với mật khẩu băm trước đó trong cơ sở dữ liệu. Nếu nó không kiểm tra, chúng tôi có thể từ chối họ truy cập bằng sending a 401 status code and ending the request.

Bước 5: Server> Tạo access token

Nếu mọi thứ đều kiểm tra ra, chúng ta sẽ tạo ra một thẻ truy cập, trong đó xác định duy nhất phiên của người dùng. Vẫn còn trong máy chủ, chúng tôi làm hai việc với các thẻ truy cập:

  1. Lưu trữ nó trong cơ sở dữ liệu liên quan đến người dùng mà
  2. Đính kèm nó vào một cookie đáp ứng để được trả lại cho khách hàng. Hãy chắc chắn đặt ngày/giờ hết hạn để giới hạn phiên của người dùng

Do đó, cookie sẽ được đính kèm với mọi yêu cầu (và phản hồi) được thực hiện giữa máy khách và máy chủ.

Bước 6: Khách hàng> Làm trang yêu cầu

lại về phía khách hàng, chúng tôi đang đăng nhập Mỗi khi khách hàng làm cho một yêu cầu cho một trang yêu cầu ủy quyền (tức là họ cần phải đăng nhập. trong), máy chủ lấy mã thông báo truy cập từ cookie và kiểm tra nó dựa vào mã thông báo trong cơ sở dữ liệu được liên kết với người dùng đó. Nếu nó kiểm tra, truy cập được cấp.

Điều này sẽ giúp bạn bắt đầu. Đảm bảo xóa cookie khi đăng xuất!

+4

Cảm ơn bạn đã mô tả. Tôi tự hỏi làm cách nào để mã thông báo truy cập cung cấp bảo mật? Kẻ tấn công có thể đánh cắp cookie hay không, làm tư cách người dùng đã đăng nhập được xác thực? Hoặc được bảo vệ bởi SSL? – Richeek

+1

@Richeek SSL bảo mật chặn trong khi yêu cầu/phản hồi, nhưng kẻ tấn công có thể truy cập cookie của bạn tại các điểm cuối (ví dụ: trình duyệt của bạn). Về mặt lý thuyết, họ có thể tạo tư cách người dùng đã đăng nhập cho đến khi cookie hết hạn. Tôi nói "về mặt lý thuyết" vì việc triển khai ở trên không giải quyết được điều đó. Trong triển khai ở trên, kẻ tấn công sẽ có quyền truy cập cho đến khi mã thông báo truy cập trong cơ sở dữ liệu của bạn được cập nhật (tức là lần đăng nhập tiếp theo). – pllx

+7

Bạn có thể vô hiệu hóa mã thông báo truy cập khi hết hạn, có thể với "ngày hết hạn" trong cơ sở dữ liệu của bạn. Hoặc, bạn có thể xem xét sử dụng [Thẻ Web JSON (JWT)] (http://techarena51.com/index.php/json-web-token-authentication-with-flask-and-angularjs/), giống như mã thông báo truy cập , nhưng có thể xử lý hết hạn mã thông báo trong số những thứ khác. [Xem thêm về JWT tại đây.] (Http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#rfc.section.4.1.4) Kẻ tấn công sẽ vẫn có quyền truy cập vào tài khoản của bạn trong một khoảng thời gian ngắn nếu họ có mã thông báo truy cập/JWT của bạn, vì vậy bạn cũng nên bảo mật điểm cuối của mình. – pllx

0

Cookie-Based Xác thực

Cookies dựa Xác thực hoạt động bình thường trong những 4 steps-

  1. Người dùng cung cấp một tên người dùng và mật khẩu trong biểu mẫu đăng nhập và nhấp chuột Log In.
  2. Sau khi yêu cầu được thực hiện, máy chủ xác thực người dùng trên chương trình phụ trợ bằng cách truy vấn trong cơ sở dữ liệu. Nếu yêu cầu là hợp lệ, nó sẽ tạo một phiên bằng cách sử dụng thông tin người dùng được lấy từ cơ sở dữ liệu và lưu trữ chúng, cho mỗi phiên một id duy nhất được gọi là session ID được tạo, theo mặc định session Id sẽ được cung cấp cho khách hàng thông qua Trình duyệt.
  3. Trình duyệt sẽ gửi Id phiên này trên mỗi yêu cầu tiếp theo, ID phiên được xác minh dựa trên cơ sở dữ liệu, dựa trên trang web id phiên này sẽ xác định phiên thuộc về khách hàng nào và sau đó cấp quyền truy cập yêu cầu.

  4. Khi người dùng đăng xuất khỏi ứng dụng, phiên sẽ bị hủy cả phía máy khách lẫn phía máy chủ.

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