[MUSIC]
Trong bài học trước, chúng tôi đã học được về xác thực cơ bản.
Chúng tôi thấy rằng trong xác thực cơ bản, khách hàng sẽ phải tiếp tục
thêm một cách rõ ràng trong trường ủy quyền có chứa tên người dùng và
mật khẩu cho mọi yêu cầu mà khách hàng gửi đến phía máy chủ.
Bây giờ điều đó là hoàn toàn tốt cho xác thực đơn giản.
Cookie là một cơ chế khác được cung cấp cho phép máy chủ của bạn
để có thể mong đợi các khách hàng để lưu trữ một số thông tin về phía khách hàng và
bao gồm thông tin đó một cách rõ ràng trong mỗi yêu cầu đi.
Vì vậy, thay vì bao gồm tên người dùng và
mật khẩu mã hóa cơ sở 64 của bạn như chúng tôi đã làm trong xác thực cơ bản, sử dụng cookie,
máy chủ của bạn có thể thiết lập một mảnh thông tin rõ ràng ở phía khách hàng
mà sau đó sẽ được bao gồm trong mỗi yêu cầu gửi đi từ phía khách hàng.
Bây giờ mở rộng này hơn nữa, nếu máy chủ của bạn muốn theo dõi thông tin về
khách hàng của bạn, sau đó máy chủ có thể thiết lập một cách rõ ràng một cơ chế theo dõi phiên.
Bây giờ, cookie nhỏ và không thể lưu trữ rất nhiều thông tin trong đó,
và điều này tất nhiên không thể được bao gồm trong yêu cầu đi.
Cookie có thể bao gồm một số thông tin cơ bản
trong tiêu đề của yêu cầu gửi đi từ máy khách.
Bây giờ, nếu chúng ta muốn nhiều thông tin hơn để được theo dõi về một khách hàng
ở phía máy chủ, sau đó express essions cho phép chúng ta làm điều đó.
Chúng ta hãy nghiên cứu thêm về cookie và
phiên Express trong một chút chi tiết hơn trong bài học này và
cũng tìm hiểu thêm về chúng trong các bài tập theo sau bài giảng này.
Vậy cookie HTTP là gì?
Cookie HTTP, như tôi đã đề cập, là một phần nhỏ của dữ liệu được gửi
từ một máy chủ web và được lưu trữ ở phía khách hàng.
Bây giờ, hầu như tất cả các trình duyệt đều có khả năng hỗ trợ
lưu trữ cookie ở phía máy khách và tự động bao gồm chúng
trong yêu cầu khi yêu cầu được gửi đến một máy chủ cụ thể.
Vì vậy, mỗi yêu cầu tiếp theo từ
phía khách hàng sẽ bao gồm một tiêu đề mới trong đó
với cookie trong tiêu đề yêu cầu.
Bây giờ rõ ràng, nếu bạn đã nhìn thấy báo chí phổ biến đã nhận được một danh tiếng xấu
ở đó, điều này, tất nhiên, không hoàn toàn không xứng đáng.
Nhưng nó bị thổi bay theo tỷ lệ so với những gì thực sự là sự thật.
Vì vậy, lấy bất cứ điều gì mà bạn đọc trên báo chí phổ biến về cookie và
danh tiếng xấu của họ với một hạt muối.
Cookies rất hữu ích để làm rất nhiều điều thú vị.
Và chúng tôi có thể đảm bảo rằng cookie có thể
được tích hợp đầy đủ tính toàn vẹn để chúng không thể bị thao tác bởi bất cứ ai ở giữa.
Bây giờ làm thế nào để cài đặt cookie này bao gồm trong yêu cầu đi làm việc?
Khi một khách hàng gửi một yêu cầu đến các trang web máy chủ,
nếu khách hàng được xác thực trên trang web máy chủ.
Ví dụ, bằng cách sử dụng xác thực cơ bản,
sau đó máy chủ có thể đổi lại, thiết lập một cookie.
Bây giờ, để thiết lập một cookie trên trang web của khách hàng, máy chủ sẽ bao gồm
trong thông điệp phản hồi một tiêu đề với tiêu đề cookie đã gửi và
cookie thực tế trong tiêu đề.
Bây giờ khi khách hàng nhận được thông báo phản hồi từ máy
chủ có chứa tiêu đề Set-Cookie, sau đó nó sẽ thiết lập cookie ở phía khách hàng. Như
vậy mà mỗi yêu cầu tiếp theo đi từ phía khách hàng sẽ
rõ ràng bao gồm một lĩnh vực tiêu đề gọi là cookie và
tiêu đề thực tế có chứa như là giá trị,
thông tin cookie đã được gửi bởi máy chủ trong thông báo phản hồi.
Vì vậy, mỗi thông báo yêu cầu tiếp theo sẽ mang cookie này trong tiêu đề.
Qua đó khi máy chủ nhận được thông báo yêu cầu này, nó có thể kiểm tra
cookie và mặc dù yêu cầu này đến từ ai.
Vì vậy, nó có thể nhận ra khách hàng bằng cách nhìn vào thông tin cookie.
Vì vậy, đây là nơi cookie chứng minh rất hữu ích trong
việc có thể gửi thông tin ủy quyền.
Vì vậy, trong phục vụ bao gồm tên người dùng và mật khẩu như một phần của
tiêu đề xác thực cơ bản trong mỗi yêu cầu đang diễn ra.
Lần đầu tiên bạn xác thực chính mình, bạn gửi tên người dùng và mật khẩu
của bạn và máy chủ thiết lập cookie về phía bạn.
Sau đó, bạn chỉ cần bao gồm cookie trong yêu cầu đi.
Bây giờ cookie cũng có thể có ngày hết hạn liên kết với chúng.
Do đó, tại thời điểm đó, cookie sẽ được coi là đã hết hạn và
sẽ không còn hiệu lực nữa.
Vì vậy, đó là một cách để kiểm soát thời gian
mà một ủy quyền là hợp lệ.
Đến với Express chính nó, Express hỗ trợ cookie như thế nào?
Bây giờ như chúng ta đã hiểu, Express sử dụng rất nhiều middleware.
Đây là nơi mà một trong những middlewares được gọi là bộ phân tích cookie
đến với ứng dụng của chúng tôi lúc tám.
Bộ phân tích cookie cho phép máy chủ thiết lập một cookie trong tiêu đề phản hồi.
Vì vậy, điều này được thực hiện bằng cách sử dụng res.cookie và tên và các
giá trị nhất định và các tùy chọn như chúng ta sẽ thấy trong bài tập sau này.
Và vì vậy cookie, khi chúng được gửi từ phía khách hàng, bao gồm trong
thông báo yêu cầu đó được phân tích cú pháp ở phía máy chủ Express, sử dụng trình phân tích cú pháp cookie.
Phần mềm trung gian phân tích cookie
, khi cài đặt sẽ cho phép bạn phân tích các cookie đến.
Và sau đó các cookie đến này sẽ được thêm
vào yêu cầu như là một tiêu đề và có thể được kiểm tra ở phía máy chủ.
Bây giờ để bảo vệ tính xác thực của cookie,
bản thân cookie có thể được ký bởi máy chủ.
Bây giờ khi máy chủ ký một cookie, máy chủ sử dụng một khóa bí mật,
mà chỉ được biết đến phía máy chủ.
Bây giờ nếu bạn biết bất cứ điều gì về bảo mật máy tính, mật mã và
mã hóa, thì bạn sẽ hiểu những gì ký tên và khóa bí mật và
khóa công khai và tất cả những điều này có ý nghĩa.
Nếu bạn không, chỉ cần nó đủ để nói rằng một khóa bí mật là
một chuỗi cụ thể mà chỉ có máy chủ biết và không ai khác biết.
Vì vậy, khi một máy chủ mã hóa một cookie, nó sẽ sử dụng một khóa bí mật như một chữ ký và
tạo ra những gì được gọi là mã xác thực thông điệp khóa-băm.
Và bao gồm điều này trong cookie đó được gửi từ máy chủ đến phía khách hàng.
HMAC này được tạo ra ở phía máy chủ chỉ có thể được thực hiện
bởi máy chủ cụ thể đó biết rằng khóa bí mật.
Bây giờ, vì máy chủ là một tài nguyên được bảo vệ, vì vậy
chỉ có máy chủ mới biết được khóa bí mật và vì vậy nó rất dễ dàng để xác minh
khi một cookie đã ký được gửi từ phía máy khách sang phía máy chủ.
Vì vậy, khi cookie đã ký được gửi từ phía khách hàng đến phía máy chủ,
cookie sẽ được thiết lập ở phía khách hàng, và
sau đó tất cả các yêu cầu tiếp theo sẽ bao gồm cookie đã ký này ở phía khách hàng.
Bây giờ phần mềm phân tích cú pháp cookie mà chúng tôi thiết lập với máy chủ Express của chúng tôi
đã hỗ trợ cookie đã ký.
Bây giờ cho điều này, trong bộ phân tích cú pháp cookie, bạn cũng sẽ cung cấp khóa bí mật làm
tham số cho bộ phân tích cú pháp cookie khi bạn thiết lập phần mềm phân tích cú pháp cookie.
Qua đó, tất cả các cookie sẽ được ký một cách thích hợp và sau đó gửi đi.
Và khi cookie được phân tích cú pháp ở phía máy chủ trong
thông báo yêu cầu đến, điều này sẽ được thêm vào thông báo yêu cầu như Req.signedCookies.
Và sau đó bạn có thể có một trường cụ thể mà bạn có thể kiểm tra trong cookie đã ký.
Cookies là cách rất hữu ích
để khách hàng của bạn có thể gửi thông tin theo đó máy chủ của bạn nhận ra khách hàng.
Nhưng tất nhiên, cookie có những hạn chế.
Chúng là một kích thước cố định, vì vậy chúng không thể mã hóa rất nhiều thông tin
về máy khách mà máy chủ của họ có thể truy xuất từ cookie.
Cookie được sử dụng để chỉ nhắc nhở máy chủ về
khách hàng nào đang gửi yêu cầu.
Bây giờ nếu bạn muốn có một cơ chế phức tạp hơn để theo dõi thông tin về
một khách hàng, sau đó ở phía máy chủ bạn có thể thiết lập những gì được gọi là phiên.
Bây giờ, phiên là một cơ chế chung có sẵn với bất kỳ máy chủ.
Đặc biệt, chúng ta sẽ xem xét chính Express và
cách Express hỗ trợ quản lý phiên ở phía máy chủ.
Cách nó hoạt động là phiên người dùng được thiết lập ở phía máy chủ.
Vì vậy, phiên này chính nó là một sự kết hợp của
một cookie và một ID phiên, và phía máy chủ theo dõi thông tin
liên kết với ID phiên đó, hoặc lập chỉ mục bởi ID phiên đó.
Bản thân thông tin phiên có thể có bất kỳ
số lượng thông tin được theo dõi ở phía máy chủ, và được lập chỉ mục bởi cookie đó.
Vì vậy, khi một khách hàng gửi một yêu cầu qua máy chủ, sau đó từ bên
trong cookie ID phiên được lấy ra và được sử dụng như một chỉ mục vào phía máy chủ.
Ví dụ,
nếu bạn đang sử dụng một cơ sở dữ liệu phía máy chủ chỉ số đó sẽ là chỉ số chính vào
cơ sở dữ liệu phía máy chủ cụ thể mà theo dõi các phiên.
Và do đó, thông tin bổ sung về phiên đó có thể được truy xuất và
sử dụng bởi máy chủ của bạn để đưa ra quyết định về cách
nó phục vụ yêu cầu khách hàng đến.
Bây giờ, theo mặc định, các phiên được lưu trữ trong bộ nhớ trên trang web máy chủ.
Bây giờ rõ ràng, điều này có nghĩa là nếu máy chủ của bạn được khởi động lại, bộ nhớ của bạn
sẽ bị xóa và do đó tất cả các thông tin phiên sẽ được biến mất hoàn toàn.
Vì vậy, thay vào đó, nhiều máy chủ sẽ sử
dụng một số hình thức lưu trữ vĩnh viễn, nơi thông tin phiên được theo dõi.
Lưu trữ vĩnh viễn ở phía máy chủ có thể được thực hiện
thông qua một số loại lưu trữ tập tin.
Hoặc thậm chí tận dụng thực tế là bạn đã có một cơ sở dữ liệu ở phía máy chủ và
hơn là lưu trữ thông tin phiên ở phía máy chủ.
Ví dụ, trong MongoDB của bạn.
Bây giờ trong bài tập sau, chúng ta sẽ xem xét việc sử dụng một lưu trữ tập tin để
theo dõi thông tin phiên ở phía máy chủ.
Một khía cạnh khác mà bạn cần phải chú ý đến là một thực tế rằng nếu bạn
đang có một thực hiện máy chủ phân tán theo đó nhiều
máy chủ đang hoạt động như máy chủ để phục vụ yêu cầu.
Sau đó, máy chủ phân phối sẽ có thể truy cập thông tin phiên.
Bất kỳ một trong những máy chủ này sẽ có thể truy cập thông tin phiên.
Vì vậy, bạn sẽ cần một công cụ phiên phân phối ở phía máy chủ,
để cho phép bạn hỗ trợ nhiều máy chủ nhân rộng.
Đặc biệt điều này rất hữu ích khi chúng tôi đang cố gắng đảm bảo độ tin cậy
của hoạt động máy chủ.
Bây giờ một lần nữa, chúng tôi sẽ không nhận được quá nhiều chi tiết về những người trong
khóa học đặc biệt này, chúng tôi sẽ dựa vào sự hiểu biết về cơ bản cách Express phiên làm việc.
Đặc biệt đến Express và
cách quản lý phiên được hỗ trợ trong Express.
Express sử dụng phần mềm trung gian Express-session hỗ trợ
việc sử dụng các phiên trong một máy chủ Express.
Bây giờ bạn cài đặt các middleware express essions.
Và trong bài tập, tôi sẽ sử dụng FileStore
như một cách lưu trữ vĩnh viễn thông tin phiên.
Và vì vậy chúng tôi cũng sẽ bao gồm các phiên tập tin cửa hàng nút mô-đun
cho phép chúng tôi sử dụng các tập tin ở phía máy chủ để theo dõi các thông tin phiên.
Chúng ta sẽ thấy các chi tiết trong bài tập sau.
Và sau đó một khi chúng tôi làm điều đó phiên của bạn chính nó sẽ được thiết lập trên với
máy chủ express mới bằng cách khai báo middleware ở đây như phiên mà mất
một tập hợp nhất định các tùy chọn như một tham số ở đây.
Các tùy chọn bao gồm tên cho phiên làm việc, vì vậy chúng tôi sẽ cung cấp cho phiên làm
việc cho phiên làm việc cụ thể.
Và sau đó bạn cũng sẽ cung cấp bí mật, một khóa bí mật được sử dụng để
mã hóa cookie đã ký sẽ được gửi đến phía khách hàng.
Và sau đó cũng thông tin bổ sung bao gồm SaveUnInitialized, mà
sẽ là một lá cờ được sử dụng và cũng là một lá cờ resave được sử dụng.
Chúng ta sẽ xem xét một số chi tiết của các tùy chọn này trong trang chiếu tiếp theo.
Vì vậy, tất cả các tùy chọn này được chỉ định ở đây.
Và nếu bạn là FileStore như là lưu trữ vĩnh viễn cho các phiên của bạn,
sau đó chúng tôi sẽ tuyên bố rằng cũng trong các tùy chọn phiên ở đó.
Vì vậy, đây là cách chúng tôi sẽ thiết lập một phiên ở phía máy chủ express
bằng cách sử dụng phiên Express Middleware.
Và chương trình Middleware Express-session, khi khách hàng gửi thông tin này,
điều này sẽ được phân tích ở phía máy chủ và
điều này sẽ dẫn đến một thuộc tính được gọi là một phiên được thêm vào đối tượng yêu cầu.
Vì vậy, thông tin phiên này sẽ có thể truy cập trong
đối tượng yêu cầu như req.session.
Vì vậy, req.session sẽ mang thêm thông tin về phiên làm việc cụ thể
cho khách hàng cụ thể đó.
Bây giờ một khi phiên này, yêu cầu đến được phân tích bởi phần mềm trung gian phiên,
thuộc tính req.session sẽ được thêm vào
đối tượng tin nhắn yêu cầu đến mà express sử dụng.
Vì vậy, sau khi phiên được phân tích cú pháp, trực tiếp phiên thuộc tính sẽ có sẵn và
chúng tôi có thể kiểm tra mà quá để kiểm tra khách hàng đã gửi yêu cầu này.
Khi họ thiết lập đối tượng phiên của họ trên trang web máy chủ,
như chúng ta đã thấy, chúng ta có thể thiết lập các tùy chọn khác nhau cho trang web máy chủ đó.
Cookie, các tùy chọn từ cookie ID phiên và giá trị mặc định cho
cookie sẽ được hiển thị ở đây, đó là đường dẫn: '/',
HttpOnly: true, secure: false, MaxAge: null.
Vì vậy, đây sẽ là giá trị mặc định của cookie sẽ được lưu trữ trên gói
và gửi đến phía khách hàng như một cookie đã ký.
Và điều này sẽ được bao gồm trong mỗi yêu cầu đến từ trang web của khách hàng.
Sau đó, genid là chức năng tạo ra ID phiên.
Mặc định là sử dụng UUID của máy chủ chính nó như ID chung.
Sau đó, cờ resave, nếu nó là đúng, buộc một phiên được lưu trở lại
cửa hàng ngay cả khi nó không được sửa đổi bởi yêu cầu.
Đôi khi yêu cầu đến có thể
chứa một nhu cầu để sửa đổi thông tin phiên ở phía máy chủ.
Và như vậy, nếu thông tin phiên được sửa đổi, nó sẽ phải được liên tục.
Nếu không, thì bạn không cần phải kiên trì nó.
Nhưng nếu bạn đặt cờ resave thành true, ngay cả khi thông tin phiên trên
máy chủ không được sửa đổi bởi yêu cầu khách hàng đến, nó vẫn sẽ được lưu lại.
Lá cờ tiếp theo mà chúng tôi xem xét là SaveUnInitialized.
Nếu điều này là đúng, nó sẽ tạo ra một phiên mới được tạo ra mà không có bất kỳ sửa
đổi nào được lưu trong cửa hàng phiên.
Bây giờ chúng tôi sẽ thiết lập điều này để false theo mặc định, có nghĩa là chúng tôi chỉ sẽ
theo dõi những phiên được ủy quyền trên máy chủ.
Bây giờ bí mật, như chúng ta thấy, là khóa bí mật được sử dụng để ký cookie,
và cửa hàng chính nó chỉ định phiên cửa hàng phiên được sử dụng.
Mặc định là sử dụng trong bộ nhớ lưu trữ.
Bạn có thể chỉ định lưu trữ tệp hoặc cửa hàng Mongo để
lưu trữ thông tin phiên đó, v.v.
Vì vậy, một khi bạn chỉ định thông tin này cho middleware phiên express của bạn sau đó
phiên sẽ được thiết lập một cách thích hợp và do đó sẽ được theo dõi ở phía máy chủ.
Mỗi yêu cầu khách hàng sau đó sẽ được ánh xạ đến thông tin phiên
ở phía máy chủ khi yêu cầu khách hàng được phân tích bởi middleware phiên express.
Và req.session sẽ được thêm vào đối tượng request.
Với sự hiểu biết này về cookie và phiên diễn đạt, chúng ta hãy chuyển
sang bài tập nơi sẽ xem xét cách chúng tôi sẽ sử dụng cookie trước tiên.
Và sau đó chúng ta sẽ xem xét làm thế nào chúng ta sẽ sử dụng các phiên Express
trong ứng dụng Express REST API của chúng tôi mà chúng tôi đã làm việc trên cho đến nay.
[ NHẠC]