Securing Spring Boot with JWT
Trong bài viết này, mình sẽ không đi sâu vào việc giải thích cũng như phân tích cơ chế hoạt động của JWT mà sẽ tập trung hướng dẫn các bạn làm sao để tạo một ứng dụng web với Spring Boot và làm sao sử dụng JWT trong ứng dụng Spring Web của các bạn Mục tiêu trong bài viết này bao gồm: Giới thiệu ...
Trong bài viết này, mình sẽ không đi sâu vào việc giải thích cũng như phân tích cơ chế hoạt động của JWT mà sẽ tập trung hướng dẫn các bạn làm sao để tạo một ứng dụng web với Spring Boot và làm sao sử dụng JWT trong ứng dụng Spring Web của các bạn Mục tiêu trong bài viết này bao gồm:
- Giới thiệu về JWT, ứng dụng của JWT trong bảo mật
- Xây dựng REST service với Spring, kết hợp JWT cho mục đích bảo mật.
Trong bài này, mình sẽ sẽ giới thiệu cho các bạn những kiến thức cơ bản của JWT, rằng JWT là gì? tại sao lại sử dụng JWT và nó đc sử dụng như thế nào Các bạn có thể tham khảo tại một số pagge mà mình thấy khá dễ hiểu như Tại TechMaster Blog hoặc Một page tiếng Anh khá hay
Để giúp các bạn hiểu được về các JWT hoạt động, mình sẽ sử dụng sơ đồ dưới đây Nhìn vào sơ đồ, ta có thể thấy luồng đi như sau
- User thực hiện login bằng cách gửi id/password hay sử dụng các tài khoản mạng xã hội lên phía Authentication Server.
- Authentication Server tiếp nhận các dữ liệu mà User gửi lên để phục vụ cho việc xác thực người dùng. Trong trường hợp thành công, Authentication Server sẽ tạo một JWT và trả về cho người dùng thông qua response.
- Người dùng nhận được JWT do Authentication Server vừa mới trả về làm "chìa khóa" để thực hiện các "lệnh" tiếp theo đối với Application Server.
- Application Server trước khi thực hiện lệnh được gọi từ phía User, sẽ verify JWT gửi lên. Nếu OK, tiếp tục thực hiện lệnh được gọi.
Thế thôi nhỉ. Mình sẽ minh họa cho các bạn dễ hiểu hơn bằng một ví dụ thực tế hơn trong cuộc sống nhé.
Bạn là một học sinh của 1 trường THPT A. Hôm nay bạn đến sớm hơn mọi hôm và muốn vào được lớp thì cửa lớp phải được mở. Nhưng trường bạn khác với những trường khác là cửa của các lớp luôn khóa khi hết giờ và bảo vệ thì chẳng có nhiệm vụ phải đi mở cửa từng lớp. Thay vào đó, mỗi lớp sẽ phải cử ra người để đi lấy chìa khóa tại phòng bảo vệ để mở cửa cho lớp mình. Như thế, bạn có thể hình dung
- Bạn là User trong sơ đồ ở trên
- Phòng Bảo Vệ là Authentication Server
- Lớp bạn là Application Server
- Chìa khóa là JWT Đầu tiên, bạn phải tới phòng bảo vệ, để bác bảo vệ xác định bạn có đúng là học sinh của trường ko, học lớp nào và giao chìa khóa (Tuơng ứng với việc user gửi thông tin về username/password để Authenticaion Server xác thực và trả về cho người dùng 1 mã JWT). Bạn nhận được chìa khóa, lấy chìa khóa để mở cửa trước khi có thể vào bên trong lớp (Tuơng ứng với việc người dùng sử dụng JWT kèm theo để Application Verify trước khi thực hiện các lệnh mà User yêu cầu)
OK. rất dễ hình dung đúng k nào? Phần giới thiệu về tư tưởng mà người ta sử dụng JWT để phục vụ cho viện authentication mình chỉ nói qua vậy thôi. Các bạn có thể tham khảo ở rất nhiều nguồn để có cái nhìn rõ hơn nhé.
Ở trong bài viết này, mình sử dụng Spring Boot cho dễ nhé. Để các bạn giảm đc effort cho việc configuration.
2.1. Tạo ứng dụng Spring Boot với IntelliJ
Mình sẽ chọn IDE IntelliJ hướng dẫn các bạn tạo project Spring Boot nhé. Mình cũng khuyến khích các bạn sử dụng IntelliJ vì nó tích hợp rất nhiều plugin hay ho. Tuy nhiên vì vấn đề bản quyền nên nhiều công ty trong tin tuyển dụng thường ghi yêu cầu là thành thạo Eclipse