Avatar
1
Lâm Văn Đời Beginner
Login trong hệ thống microservices với Spring
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 trong hệ thống Microsevices viết bằng Spring. 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.Có thể là cách phổ biến mà mọi người hay dùng chứ chưa cần phức tạp như các hệ thống lớn đâu ạ.

Cảm ơn mọi người

  • Answer
spring
Remain: 5
1 Answer
Avatar
tvd12 Beginner
tvd12 Beginner
Theo anh hiểu thì em đang muốn có 1 service login chung, còn lại các service khác chỉ lo nghiệp vụ thôi nhỉ? Nếu vậy em có thể theo cách này, giả sử em có 2 service:

  1. authen.app.com: Là service authen tập trung
  2. service.app.com: Là service nghiệp vụ

Em sẽ cần cấu hình callback url trên google là: https://authen.app.com/google-call-back

Bược 1: User vào service.app.com, lúc này nó thấy cookie không có token, nghĩa là chưa được authen, nó sẽ redirect sang authen.app.com và set vào cookie của authen.app.com là requestApp=service.app.com.

Bước 2: authen.app.com sẽ kiểm tra xem có token của ở trong cookie không, nếu có nó sẽ redirect sang service.app.com với cookie đính kèm token, service.app.com sẽ được mở lên và đến đây kết thúc.

Nếu authen.app.com không thấy có token, nó sẽ hiển thị màn hình login lên.

Bước 3: user chọn login qua google, sau đó google sẽ gọi callback: https://authen.app.com/google-call-back

Bước 4: em sẽ lưu thông tin của user, tạo token.

Bước 5: em lấy requestApp=service.app.com từ cookie sau đó redirect sang service.app.com với cookie đính kèm token, service.app.com sẽ được mở lên và đến đây kết thúc.

Cơ bản là như vậy em ạ.

  • 0
  • Reply
Cảm ơn anh vì câu trả lời.

Trong quá trình tìm hiểu về chức năng login trong hệ thống chia BE và FE riêng biệt thì em có 1 chỗ đang phân vân bấy lâu mà chưa biết hỏi ai nên cho em hỏi anh thêm 1 câu là giờ em có tìm thấy 2 hướng để lấy thông tin của user sau khi user nhấn  chấp nhận cho phép App của ta sử dụng thông tin FB/Google của họ.

  1. Gọi Google/FB ở FE: cụ thể config client-secrect và cient- id ở React sau đó nhấn nút login và nhận được id của user đó từ Google/FB => gửi id vừa nhận lên BE để xử lí => Nếu id đó chưa tồn tại thì tạo account và token hoặc nếu id có ở DB  rồi thì chỉ tạo token => gửi token cho FE.
  2. Gọi Google/FB ở BE: Đối với Spring thì dùng thư viện spring-oauth2-client.Config client-secrect và cient- id ở BE.Cung cấp FE 1 đường link.Sau khi nhấp vào thì BE sẽ redirect sang trang Google/FB tương ứng với đường link => BE gọi và nhận được id => các bước tiếp theo xử lí tương tự như cách 1.Cuối cùng sẽ redirect về địa chỉ của FE ví dụ redirect url như sau: localhost:3000/oauth2/callback?token=12345abc.Sau đó FE nhận token và lưu trữ.

Cho em hỏi 2 cách này thì cách nào ổn hơn ạ.

Rất cảm ơn anh!

 –  Lâm Văn Đời 1668309451000
Anh thấy là cách 2 ổn hơn, vì cái gì mà có liên quan đến từ secrect nghĩa là cần phải bảo mật ở một mức độ nào đó em ạ.  –  tvd12 1668326357000