Làm thế nào để xác thực dựa trên cookie hoạt động?


209

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 làm gì? Máy chủ cần làm gì? Theo thứ tự? Làm thế nào để chúng ta giữ mọi thứ an toàn?

Tôi đã đọc về các loại xác thực khác nhau và về cookie nhưng tôi muốn có một mô tả cơ bản về cách sử dụng hai loại này với 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ả về cách thức.


Câu trả lời:


162

Một cookie về cơ bản chỉ là một mục trong từ điển. Mỗi mục có một chìa khóa và một giá trị. Để xác thực, khóa có thể là một cái gì đó 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 các 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 nó vào phản hồi mà máy chủ gửi lại sau khi yêu cầu. Trình duyệt sau đó 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. Một cookie được mã hóa thường được gọi là một cookie đã ký. Về cơ bản, máy chủ mã hóa khóa và giá trị trong mục từ điển, vì vậy chỉ có máy chủ mới có thể sử dụng thông tin. Vì vậy, cookie sẽ được an toàn.

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


Điều 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ó lấy 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 các tùy chọn trong tiêu đề HTTP để biết cách trình duyệt xử lý tên miền phụ.
Conor Patrick

286

Tôi nhận ra điều này đã muộn nhiều năm, nhưng tôi nghĩ rằng 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 làm gì? Máy chủ cần làm gì? Theo thứ tự? Làm thế nào để chúng ta giữ mọi thứ an toàn?

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

Trước 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 đến máy chủ chứa tên người dùng và mật khẩu của mình.

Bước 2: Máy chủ> Xử lý đăng ký

Máy chủ nhận được yêu cầu này và băm mật khẩu trước khi lưu 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 tế của người dùng của bạn.

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

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

Bước 4: Máy chủ> Xác thực đăng nhập

Máy chủ tra cứu 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 được 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 cách gửi mã trạng thái 401 và kết thúc yêu cầu .

Bước 5: Máy chủ> Tạo mã thông báo truy cập

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

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

Do đó, các cookie sẽ được đính kèm theo 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> Tạo yêu cầu trang

Quay lại về phía khách hàng, chúng tôi hiện đã đăng nhập. Mỗi khi khách hàng yêu cầu một trang yêu cầu ủy quyền (nghĩa là họ cần phải đăng nhập), máy chủ sẽ nhận được mã thông báo truy cập từ cookie và kiểm tra nó trong cơ sở dữ liệu liên quan đến 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. Hãy chắc chắn để xóa cookie khi đăng xuất!


10
Cảm ơn đã mô tả. Tôi chỉ tự hỏi làm thế 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, đặt ra như một người dùng đã đăng nhập được xác thực không? Hoặc được bảo vệ bởi SSL?
Richeek

6
@Richeek SSL bảo vệ việc chặn trong các 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, sau đó họ có thể đặt ra như một 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ì thế, việc thực hiện ở trên không xử lý đượ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/10/2015

14
Bạn có thể làm mất hiệu lực mã thông báo truy cập khi hết hạn sử dụng, có lẽ với ngày hết hạn của Google trong cơ sở dữ liệu của bạn. Hoặc, bạn có thể xem xét sử dụng Mã thông báo web JSON (JWT) , 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. Thêm thông tin về JWT tại đây. Kẻ tấn công vẫn sẽ 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 chúng 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 các điểm cuối của mình.
pllx 7/10/2015

3
Mất tôi lâu để nói lời cảm ơn! Cảm ơn lời giải thích của bạn
Richeek

4
@ManuChadha bạn có thể cùng với mã thông báo / khóa phiên cũng lưu địa chỉ IP của người dùng cùng với các tham số nhận dạng khác như tác nhân người dùng, v.v. nếu yêu cầu đi kèm với cookie hợp lệ nhưng từ ip sai, trình duyệt, v.v. từ chối yêu cầu và chuyển hướng người dùng đến trang đăng nhập để xác thực lại.
FalcoGer

18

Xác thực dựa trên cookie

Xác thực dựa trên cookie hoạt động bình thường trong 4 bước này

  1. Người dùng cung cấp tên người dùng và mật khẩu trong mẫu đăng nhập và nhấp vào Đăng nhập.
  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 phụ trợ bằng cách truy vấn trong cơ sở dữ liệu. Nếu yêu cầu 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 tìm nạp từ cơ sở dữ liệu và lưu trữ chúng, đối với mỗi phiên, một id duy nhất được gọi là Id phiên được tạo, theo mặc định, Id phiên 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 cho 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 bị hủy cả phía máy khách và phía máy chủ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.