Ngày nay thì đa số các hệ thống sẽ áp dụng cách thứ 2 đó là authentication bằng Token-Base. Nhưng trước đó thì Cookie-Base cũng được sử dụng khá phổ biến.
Ở bài này mục đích của mình sẽ là chỉ nghiên cứu ở mức cơ bản, sẽ đưa ra những flow của chúng. Còn về chi tiết thì mọi người có thể nghiên cứu sâu hơn. Mình sẽ đưa ra cái nhìn tổng quan để mọi người biết và hình dung được việc authen bằng cả 2 cách thức. Còn về đi sâu chi tiết thì nó khá phức tạp, tại thời gian mình viết bài này thì mức độ hiểu biết của mình chỉ ở mức cơ bản. Sau này nếu có hiểu biết nhiều hơn, sâu hơn thì mình sẽ chia sẻ nó ở một nội dung trình bày khác.
1. Tìm hiểu thêm về điểm giống nhau giữa cookie vs token authentication
Flow công tác của cookie vs token nhìn vào hình vẽ bên trên thì flow 2 thằng sẽ gần giống nhau. Ở đây mình sẽ có 2 phần đó là browser và server.
Browser hay còn gọi là trình duyệt, là các ứng dụng mà bạn dùng để lướt web như chorme, coccoc… đóng vai trò là phía client. Đầu tiên khi mà bạn login vào 1 hệ thống, thì phía trình duyệt của bạn sẽ gửi lên server thông tin username và password bạn vừa nhập ở phía trình duyệt của bạn vào.
Ví dụ khi bạn login vào Facebook, thì bạn cần nhập thông tin username và password của bạn vào ô đăng nhập, sau đó khi bạn ấn button đăng nhập. Thì phía client sẽ gửi thông tin đó lên phía server để tiếp nhận và xử lý.
Về phần phía server sau khi tiếp nhận được thông tin username và password, thì việc tiếp theo là phải check thông tin trong database để xem username và password có tồn tại trong hệ thống được không. Sau đó trả lại kết quả cho phía client. Trong trường hợp mà thông tin username và password hợp lệ, thì phía server sẽ trả về cho client một thông tin nào đó (có thể là 1 đoạn token, hay 1 giá trị nào đó). Phía client sẽ lưu cái thông tin trả về đó lại và khi phía client muốn thực hiện 1 request đến server, thì client sẽ phải gửi kèm cái thông tin vừa lưu đó cùng với request lên server. Ví dụ 1 xíu cho dễ hình dung !, mọi người còn nhớ câu chuyện về bầy dê và con sói không. Khi mà dê mẹ đi ra khỏi nhà, thì bà đã để lại những thông tin và dấu hiệu chỉ có dê mẹ và dê con biết. Chỉ có ai biết và nắm được thông tin kí hiệu đó thì mới là dê mẹ. Con sói đã cố gắng vào nhà nhưng vì không biết được mật mã nên đã không thể vào được.
Ở đây việc vào nhà cũng như việc bạn truy cập vào bên trong hệ thống, chỉ có những người của hệ thống mới có và nắm giữ được thông tin từ phía server trả về. Từ thông tin đó thì hệ thống mới biết và nhận dạng được là user đó có đúng là của hệ thống mình không. Lúc đó mới cấp quyền cho truy cập hệ thống. Thì sau khi login thành công và nhận được thông tin từ phía server trả về, mỗi lần phía client request thì phải đính kèm thông tin đó theo. Phía server sẽ có nhiệm vụ là validate cái thông tin đính kèm đó. Nếu hợp lệ thì sẽ trả lại response cho phía client, còn trường hợp không hợp lệ thì sẽ không trả về dữ liệu. Với cái flow này thì cả 2 sẽ tương tự như nhau, nhưng cách thực hiện và triển khai sẽ khác nhau. Vậy cùng đi nghiên cứu xem chúng khác nhau thế nào !.
2. Về Cookie Base
Đối với cookie base, khi bạn gửi thông tin username và password lên server thì server sẽ tạo ra 1 session, hay còn gọi là 1 phiên công tác giữa client và server. Phía server sẽ lưu thông tin session đó vào trong database và sẽ set cookie ở phía client với thông tin session id chính là cái id vừa mới tạo ra. Điều này để giúp nhận ra được đây là phiên công tác giữa client này và server. 1 server sẽ công tác với rất nhiều client, mỗi client sẽ nắm giữ session và id khác nhau. Khi mà phía client đã có cookie lưu lại session rồi thì với mỗi lần thực hiện request, cookie sẽ gửi lên bao gồm cả thông tin session đến phía server. Phía server sẽ lấy ra thông tin session id đó và đem so sánh với database để xem session đó có hợp lệ được không. Và để kiểm tra xem session đó thuộc user nào, user đấy có thông tin gì, có những quyền nào đối với hệ thống, được phép truy cập những tài nguyên nào. Từ đó sẽ trả ra response, còn đối với session k hợp lệ, thì sẽ k trả ra dữ liệu.
Điều mình nhận thấy ngay ở đây là gì, mỗi khi có client truy cập đến server, phía server sẽ phải tạo ra một session và phải lưu trữ nó lại trong database để kiểm tra và xử lý nó. Và mỗi 1 request, server sẽ lại phải lấy session id mà client gửi lên để query db xem session đó có hợp lệ được không. Với số lượng client nhiều thì phía server sẽ phải lưu trữ và xử lý rất nhiều. Điều này làm giảm performance của hệ thống và tăng số lượng data mà hệ thống phải lưu trữ. Vì vậy mà cách authentication bằng Cookie Base ngày này không còn được sử dụng nhiều nữa. Thay vào đó là sẽ được thay thế bởi Token Base. Thì Token Base hoạt động thế nào, và nó khắc phục nhược điểm của Cookie Base thế nào thì mình sẽ cùng đi nghiên cứu tiếp về Token Base.
3. Về Token Base
Tương tự như với Token Base, việc authentication bằng Cookie Base thì bạn vẫn sẽ phải gửi lên username và password. Sau khi check rằng username và password hợp lệ, thì server sẽ tạo ra 1 token. Ở đây thì mình khuyến khích dùng JWT (Json Web Token, mình sẽ làm 1 bài khác nói rõ hơn về JWT). Hiểu đơn giản là server sẽ tạo ra 1 token, và token sẽ chứa các thông tin liên quan đến việc dùng để verify ví dụ như role của user… Thì phía trình duyệt sau khi nhận dc token này, sẽ lưu vào local storage. Và mỗi khi thực hiện 1 request, trình duyệt sẽ đính kèm cái token này vào cái header authorization và gửi ngược lại lên server. Khi này nhiệm vụ của server là đi validate cái token này, xem token có hợp lệ được không. Và nếu token bị sửa đổi ở phía client thì phía server sẽ phát hiện ra và token đó sẽ không còn hợp lệ. Cơ chế thế nào thì ở bài sau mình sẽ nói rõ. Và ok khi mà nó kiểm tra được rằng token này đã hợp lệ, thì lúc này nó sẽ coi đây là 1 request hợp lệ và sẽ trả ra dữ liệu. Ở đây khác với Cookie Base , thằng Token Base sẽ không phải lưu trữ, quản lý các token. Không phải query xuống database để kiểm tra token. Việc này giúp cho việc thực hiện request sẽ nhanh và đơn giản hơn nhiều. Giảm thiểu công việc khi phát triển hệ thống. Và khi logout, thì bạn phải gửi 1 yêu cầu để server nó xóa cái token đó đi. Điều này nhằm đảm bảo tính bảo mật, nếu không thì token vẫn còn hợp lệ.
Và sau đây mình sẽ tổng hợp lại một số điểm khác nhau giữa 2 cách authentication bên trên.
Trên đây là những thông tin liên quan đến Token Cookie. Hy vọng nội dung trình bày trên đã mang đến cho bạn những kiến thức bổ ích. Mọi thông tin câu hỏi, vui lòng liên hệ với chúng tôi; LVN Group với đội ngũ chuyên viên với nhiều năm kinh nghiệm trong nghề sẽ hỗ trợ quý bạn đọc một cách chuyên nghiệp và nhanh chóng nhất. Cảm ơn quý bạn đọc đã dành thời gian theo dõi nội dung trình bày của chúng tôi.