JWT authentication Laravel là gì?
Framework Laravel mã nguồn mở hiện đang rất thu hút có hàng triệu người truy cập và sử dụng trên toàn thế giới. Nhu cầu để xác thực người dùng, hoặc bảo vệ Authentication API trong framework Laravel là rất lớn, vậy làm sao để thực hiện? Bài viết này sẽ hướng dẫn người dùng sử dụng JWT authentication Laravel. Đây là một phương pháp khá hữu ích trong các ứng dụng web, đặc biệt là mobile app.
JWT authentication Laravel dùng để làm gì?
Cấu trúc của một JWT như thế nào?
JSON Web Tokens hoạt động như thế nào?
Sử dụng Authentication trong Laravel
JWT authentication Laravel dùng để làm gì?
JWT authentication Laravel là cách viết ngắn gọn của việc sử dụng JWT (JSON Web Token) để bảo vệ cho Authentication API trong Laravel.
Trong Authentication API, Client giao tiếp và gửi request (yêu cầu) đến Server thông qua URL trên HTTP. Nếu chúng ta dùng phương thức nào để bảo mật Authentication API thì tất cả các User khác có thể truy cập Request này để lấy thông tin hoặc xoá Client. Và Server sẽ thực hiện yêu cầu mà không cần biết có phải là của Client hay không.
Điều này rất nguy hiểm. Các hacker có thể xóa hết dữ liệu hoặc đánh cắp thông tin người dùng. Vì vậy, cần một phương pháp để Server xác định được yêu cầu đó là của Client thì Server mới thực hiện. Hiện nay, JWT là một trong những lựa chọn phổ biến nhất.
Thông tin chung về JWT
Dưới đây chúng tôi sẽ cung cấp một số thông tin cần biết về JWT.
JWT là gì?
JSON Web Token (JWT) là một tiêu chuẩn mở (RFC7519). Chúng định nghĩa một cách nhỏ gọn và khép kín để truyền thông tin an toàn giữa các bên dưới dạng đối tượng JSON.
Những thông tin này được xác minh và đáng tin cậy vì nó được ký điện tử. JWT có thể được ký bằng cách sử dụng bí mật (với thuật toán HMAC) hoặc cặp khóa public/private bằng RSA hoặc ECDSA.
Cấu trúc của một JWT như thế nào?
Mỗi một JSON Web Token gồm có 3 phần là Header, Payload, Signature. Những phần này được ngăn cách bởi dấu “.” (dot).
Header
Header là đoạn đầu tiên, nó bao gồm 2 thành phần chính là:
- alg: Thuật toán sử dụng để mã hoá, như là HMAC SHA256 hoặc RSA.
- typ: Loại token. Mặc định là JWT.
Payload
Phần thứ hai của JWT (JSON Web Token) là payload, nó chứa các thông tin. Các thông tin này là các entity (thường là user) và dữ liệu bổ sung. Có ba loại thông tin: registered, public, and private.
- Registered: Đây là một tập hợp các thông tin được xác định trước, không bắt buộc nhưng được khuyến nghị. Dùng để cung cấp một tập hợp các xác nhận quyền sở hữu hữu ích, có thể tương tác. Tiêu biểu là: Iss (nhà phát hành), exp (thời gian hết hạn), sub (chủ đề), aud (khán giả)...
- Public: Public có thể được xác định theo ý muốn bởi những người dùng JWT. Nhưng để tránh ảnh hưởng, trùng lặp chúng nên được xác định trong IANA JSON Web Token Registry. Hoặc được định nghĩa là một URL có chứa namespace không bị trùng lặp.
- Private: Đây là thông tin tự định nghĩa, được tạo ra để chia sẻ thông tin giữa các bên đồng ý sử dụng chúng.
Signature
Để tạo phần chữ ký, chúng ta cần có Header, Payload đã được mã hoá và 1 chuỗi secret.
Sử dụng JWT khi nào?
-
Authorization:
Đây là tình huống phổ biến nhất để sử dụng JWT. Khi người dùng đã đăng nhập, mỗi request tiếp theo sẽ bao gồm JWT. Điều này cho phép người dùng truy cập các tài nguyên được phép với JWT đó.
Single Sign On là một tính năng được JSON Web Token sử dụng rộng rãi hiện nay. Chúng có chi phí tiết kiệm và khả năng dễ dàng sử dụng trên các miền khác nhau.
-
Information Exchange:
JWT là một cách tốt để truyền thông tin giữa các bên một cách an toàn. Bởi vì JWT có thể được ký. Ví dụ: sử dụng cặp khóa public/private để chắc chắn rằng đúng người đúng việc.
Ngoài ra, vì chữ ký được tính bằng cách sử dụng Header và Payload, bạn cũng có thể xác minh rằng nội dung không bị giả mạo.
JSON Web Tokens hoạt động như thế nào?
Trong xác thực, khi người dùng đăng nhập thành công bằng thông tin đăng nhập của họ, JWT sẽ được trả về. Vì Token là thông tin xác thực người dùng nên cần phải hết sức cẩn thận để ngăn chặn các vấn đề bảo mật. Nói chung, bạn không nên giữ mã thông báo lâu hơn yêu cầu.
Bất cứ khi nào người dùng muốn truy cập tài nguyên được bảo vệ, user agent phải gửi JWT. Thường là trong Header Authorization bằng cách sử dụng schema Bearer.
Nếu tokens được gửi trong Authorization header, Cross-Origin Resource Sharing (CORS) sẽ không thành vấn đề vì nó không sử dụng cookie.
Cách JWT được lấy và sử dụng để truy cập các API hoặc tài nguyên qua 3 bước dưới đây:
- Ứng dụng hoặc client gửi yêu cầu ủy quyền đến máy chủ.
- Khi ủy quyền được cấp, máy chủ sẽ trả về một mã thông báo truy cập cho Ứng dụng.
- Ứng dụng sử dụng mã thông báo truy cập để truy cập các tài nguyên được bảo vệ (như API).
Authentication là gì?
Ở phần dưới đây, chúng ta sẽ tìm hiểu qua về Authentication nhé!
Định nghĩa Authentication
Authentication (tạm dịch là xác thực) là một quá trình kiểm tra danh tính của một tài khoản đi vào hệ thống hiện tại thông qua một hệ thống xác thực. Đây được coi là bước khởi đầu của bất kỳ hệ thống dựa trên người dùng nào.
Theo Wikipedia, định nghĩa của Authentication được hiểu là:
Một hành động thiết lập hoặc xác thực một cái gì đó đáng tin cậy. Có nghĩa là, những tuyên bố của người đó hoặc sự việc là hoàn toàn đúng sự thật.
Một số ví dụ để bạn hiểu định nghĩa Authentication là:
- Máy chủ sẽ xác thực các yêu cầu do máy khách của người dùng gửi chính xác hay không bằng Authentication.
- Máy chủ sẽ xác thực nội dung yêu cầu do người dùng A gửi đúng hay không cũng là Authentication.
- Bản chất của Authentication là bạn sẽ xác nhận yêu cầu HTTP được gửi từ ai đó.
Sử dụng Authentication trong Laravel
JWT authentication Laravel xây dựng giúp cho việc thực hiện xác thực vô cùng đơn giản. Bạn sẽ không ngờ được là Laravel đã xây dựng sẵn Authentication. Chúng ta chỉ việc sử dụng và tùy chỉnh theo chúng ta muốn mà thôi. Nào chúng ta hãy bắt tay đi tìm hiểu nhé!
Hệ thống xác thực người dùng Authentication của Laravel được xây dựng dựa trên 2 thành phần cốt lõi. Đó là guard và provider.
Guards
Guard hiểu như là một cách cung cấp logic được dùng để xác thực người dùng. Trong Laravel, người dùng thường chọn session guard/ token guard.
- Session guard duy trì trạng thái người dùng trong mỗi yêu cầu bằng cookie.
- Token guard xác thực người dùng bằng cách kiểm tra mã thông báo có hợp lệ theo từng yêu cầu.
Vì vậy, như bạn có thể thấy, guard xác định logic của việc xác thực. Chúng không cần thiết phải luôn xác thực bằng cách lấy thông tin xác thực hợp lệ từ back-end. Bạn có thể triển khai một biện pháp bảo vệ đơn giản như kiểm tra sự hiện diện của một phần thông tin cụ thể trong yêu cầu và xác thực người dùng dựa trên đó.
Providers
Nếu Guards hỗ trợ xác định logic để xác thực thì providers sẽ truy xuất dữ liệu người dùng từ back-end. Việc thực hiện truy xuất người dùng sẽ do các nhà cung cấp thực hiện. Laravel hỗ trợ người dùng truy cập bằng cách sử dụng Eloquent và Query Builder vào cơ sở dữ liệu.
Lưu ý khi đăng ký tài khoản với hệ thống chợ mật khẩu tối thiểu 60 ký tự và tối đa 255 ký tự. Chúng tôi cũng có thể thay đổi trường remember_token là nullable() khi di chuyển bảng người dùng.
Một quá trình Authentication trong Laravel
Mỗi một quá trình Authentication sẽ bao gồm 3 phần là:
-
Phát sinh các dấu hiệu:
Đây là lúc quyết định nên lựa chọn và sử dụng dấu hiệu gì và dùng cách nào để tạo ra dấu hiệu đó.
Mỗi một quá trình Authentication sẽ có sự xuất hiện của nhiều dấu hiệu như: password/username, user token, api key,.. Mỗi một dấu hiệu này đều sẽ có cách tạo ra khác nhau bởi quy ước sử dụng khác biệt.
-
Lưu trữ cho các dấu hiệu:
Đây là một trong những bước quyết định xem bạn nên lưu trữ dấu hiệu này ở đâu. Bạn nên lưu ở cả client và server hay thông qua vị trí nào của bản tin HTTP.
-
Kiểm tra các dấu hiệu:
Đây là điều mà ứng dụng của chúng ta để kiểm tra lại các tích hợp lệ của dấu hiệu, từ đó đối chiếu xem lại các dấu hiệu này của của người dùng nào,…
Kết luận
Bài viết trên, GrowUpWork đã cung cấp một số thông tin để giải thích JWT authentication Laravel là gì. Hy vọng rằng bài viết này sẽ giải đáp thắc mắc của người đọc và mang đến những thông tin hữu ích.
Tin tức liên quan
Lộ trình học Java Developer dành cho mọi lứa tuổi
Tương lai ngành lập trình game liệu còn đủ tốt để theo đuổi?
Phân biệt nghề nghiệp: AI Developer và AI Engineer
Machine Learning Engineer Là Gì? Tiềm năng và thách thức của ML Engineer