Hi anh, em có thời gian rãnh nên vào đọc lại câu hỏi này https://stackask.com/question/login-trong-he-thong-microservices-voi-spring/ để có thêm kiến thức để làm 1 hệ thống Microservices bằng Spring để rèn luyện thêm.
Em rất muốn tự làm 1 cái app đơn giản (FE dùng ReactJS, BE dùng SpringBoot) đơn giản có đầy đủ các chức năng cơ bản như login = account của hệ thống, login = google, Facebook, áp dụng cả Kafka hoặc RabbitMQ để làm 1 chức năng gì đó (Hiện em chỉ biết mỗi chức năng gửi mail mà ko biết hệ thống thật có dùng ko 😀 ), Redis để cache,các service trong hệ thống trao đổi thông tin với nhau ….. với mô hình Microservices.
Nên em cho em thắc mắc thêm vài câu hỏi về chủ đề này:
- Message Queue ( Kafka, RabbitMQ,….) thường dùng để làm những gì trong hệ thống Microservices.
- Theo câu trả lời của anh thì em hiểu 1 service có nghĩa là có UI và cả BE luôn đúng ko ạ ? Nhưng App em đang muốn là chỉ có 1 UI là ReactJS thôi. Client (ReactJS) sẽ call đến Api gateway (AG) và AG gọi đến service authen để check token và nếu token verify ok thì sẽ gọi đến các service khác để lấy data trả về cho client (khái niệm service theo em đang hiểu là web service chỉ gửi request và nhận response với data kiểu JSON, nếu em có hiểu sai thì mong anh chỉ em lại).Nếu như vậy thì câu hỏi của em là service tập trung như anh nói ở trên thì có liên quan gì đến cơ chế oauth2 hay ko a ? (em đang rất rối về cái cơ chế Oauth2 này trong hệ thống Microservices, có thật sự cần thiết để dùng cơ chế này hay không ). Mong anh có thể nói rõ hơn dựa vào ví dụ của em nêu ở trên để em hiểu thêm về service authen tập trung như anh nói để có thể login bằng nhiều cách với hệ thống Microservices.Em đang muốn dùng 100% thư viện của Spring để viết tất cả các service này.
- Mong a suggest thêm 1 số công nghệ và các chức năng cơ bản hay ho của hệ thống Microservices để em có thể học tập và làm theo.
Rất cảm ơn anh về tâm huyết của anh trong các câu trả lời !
1. Nó thường được dùng để các service (service là chương trình hoặc là 1 server) giao tiếp được với nhau. Ví dụ nếu em có 1 service web để user tạo đơn hàng, em có thể thông qua kafka, MQ để gửi thông tin đơn hàng đến service xử lý đơn hàng.
2. Phải làm rõ cách hiểu về service
a. service hiểu theo nghiệp vụ thì nó thường có cả web lẫn API, ví dụ khi nói MỘT service quản lý đơn hàng thì có thể nó sẽ bao gồm: giao diện để user nhập đơn hàng, API để tiếp nhận đơn hàng, giao diện để admin duyệt đơn hàng
b. service hiểu theo kỹ thuật thì nó là một chương trình chạy độc lập, ví dụ phần quản lý đơn hàng kia thì có CÁC service: website giao diện cho user, API server để tiếp nhận đơn hàng, website giao diện.
Nên em cần nói rõ là em đang nhắc đến khái niệm service nào thì anh mới trả lời tiếp được.
3. Công nghệ thì:
Code: anh đang dùng spring-boot hoặc ezyfox, redis, kafka, MySQL
DevOps: anh dùng cả k8s và server thường
Dạ nếu vậy cái em đang muốn làm là service theo kiểu service hiểu theo kỹ thuật.
Em đang muốn hỏi anh về cơ chế xác thực của hệ thống như trên.
1. Đối với chức năng login bằng FB,Google: WUI sẽ chỉ có nút nhấn, sau đó user nhấn vào thì google sẽ hiển thị nên popup để cho user xác nhận là có ch phép web này login không, nếu họ đồng ý thì sau đó Google sẽ gọi AG thông qua callback mà em cấu hình, AG sẽ chịu trách nhiệm lấy thông tin user và lưu vào DB, sau đó nó sẽ redirect đến WUI với token của web (của em) trong cookie.
2. Khi gửi request lên AG thì theo cơ chế SSO anh đã trình bày ở câu trả lời trước thì lúc này request user gửi lên AG cũng có token trong cookie khi gửi lên, nếu token hợp lệ nghĩa là xác thực rồi.
3. Oauth2 là giao thực để cho phép 1 ứng dụng bên ngoài có tận dụng việc xác thực user có sẵn. Ví dụ như web của em là abc.com thì nó không thuộc google nên cần Oauth2. Nhưng nếu là cùng trong một hệ sinh thái của chính em, ví dụ mail.abc.com, search.abc.com thì phải dùng SSO chứ không phải là Oauth2. Bởi vì chung hệ sinh thái nên dùng chung được token thì không cần Oauth2 nữa.