Avatar
1
Lâm Văn Đời Beginner
Xác thực trong hệ thống microservices
Hi mọi người,

Sau 1 thời gian ngắn tìm hiểu về Microservices với Spring Boot cũng như Spring Cloud thì em thấy đối với chức năng login xác thực người dùng thì đa số sẽ có 1 Api Gateway (Em đang dùng Spring cloud gateway) nhận tất cả request và xác thực 1 bên thứ 3 mà em thấy nhiều ví dụ nhất là KeyCloak.

  1. Cho em hỏi là ở thực tế thì trong hệ thống microservices thì các cách, giải pháp triển khai authenticationauthorization như thế nào ạ ?
  2. Em hiện tại ko muốn xác thực thông qua Keycloak mà em muốn viết logic để xác thực bằng Spring và lưu user của hệ thống ở DB của ta thay vì lưu ở Keycloak thì có ổn ko ạ ? Tại vì theo e nghĩ ở dự án thực tế chả ai lưu user của mình ở Keycloack cả.
  3. Nếu có 1 con Gateway thì các service khi gọi nội bộ với nhau thì có cần xác thực ko ạ ?
  4. Em đang muốn làm chức năng xác thực (login) bằng account của hệ thống và cũng như xác thực bằng account Facebook, Google. Cái này nếu làm dự án Monolithic thì em OK còn khi với hệ thống microservices thì em chưa có solution.Mong anh Dũng và mọi người gợi ý giúp em cách làm về chức năng login kiểu này vừa account hệ thống vừa social account.

Tks mọi người !

  • Answer
spring security
Remain: 5
1 Answer
Avatar
tvd12 Beginner
tvd12 Beginner
  1. Trong microservices có mấy dạng authen thế này

a. Có 1 service authen tập trung. Nghĩa là cho dù em có login bằng google, facebook hay username password thì nó cũng sẽ tập trung hết callback về đây, sau đó service này sẽ tạo ra token và lưu vào db hoặc memcache, sau này khi user sử dụng token gửi lên thì các service khác hoặc là gọi API sang service kia để kiểm tra token, hoặc gọi thằng vào db hoặc redis của service đó.

b. Sử dụng OAuth 2.0. Các này chỉ phù hợp với các doanh nghiệp có siêu ứng dụng như LINE chat chẳng hạn. Thì user khi login sẽ không dùng username password mà chỉ có 1 lựa chọn duy nhất là dùng LINE chat. Khi xác thực thành công thì cái service mà user đang dùng ví dụ như đọc tin tức chẳng hạn sẽ tự sinh ra token riêng, không liên quan gì đến LINE chat cả.

c. Sử dụng SSO như KeyCloak hoặc tự dựng giống như google. Về bản chất bên trong vẫn có phần authen tập trung, nhưng nó tận dụng cơ chế cookie để chia sẻ token.

  1. Hoàn toàn ổn em ạ.

  1. Anh chưa hiểu ý em gọi nội bộ ở đây là gọi cái gì?

  1. Em tách riêng thành câu hỏi khác nhé.
  • 0
  • Reply
Em vừa đặt câu hỏi ở mục số 4 rồi ạ.

Còn phần 3 ý của em là khi client gọi API lấy data thì cần xác thực thông qua token.Còn khi 1 service gọi 1 service khác trong cùng hệ thống thì có cần xác thực ko ạ ?

 –  Lâm Văn Đời 1668232544000
Không em ạ, thế mới nhanh được và hệ thống mới đủ sức chịu tải được em ạ.  –  tvd12 1668233990000