Tôi đang gặp khó khăn trong việc lựa chọn chiến lược xác thực hợp lý / an toàn cho kiến trúc microservice. Bài đăng SO duy nhất tôi tìm thấy về chủ đề này là bài này: Đăng nhập một lần trong Kiến trúc microservice
Ý tưởng của tôi ở đây là có trong mỗi dịch vụ (ví dụ: xác thực, nhắn tin, thông báo, hồ sơ, v.v.) một tham chiếu duy nhất cho mỗi người dùng (khá logic sau đó là của anh ta user_id
) và khả năng có được người dùng hiện tại id
nếu đăng nhập.
Từ các nghiên cứu của tôi, tôi thấy có hai chiến lược khả thi:
1. Kiến trúc dùng chung
Trong chiến lược này, ứng dụng xác thực là một dịch vụ khác. Nhưng mỗi dịch vụ phải có khả năng thực hiện chuyển đổi session_id
=>user_id
vì vậy nó phải đơn giản. Đó là lý do tại sao tôi nghĩ về Redis, sẽ lưu trữ khóa: giá trị session_id:user_id
.
2. Kiến trúc tường lửa
Trong chiến lược này, lưu trữ phiên không thực sự quan trọng, vì nó chỉ được xử lý bởi ứng dụng xác thực. Sau đóuser_id
có thể được chuyển tiếp đến các dịch vụ khác. Tôi đã nghĩ về Rails + Devise (+ Redis hoặc mem-cacheed, hoặc lưu trữ cookie, v.v.) nhưng có rất nhiều khả năng. Điều duy nhất quan trọng là Service X sẽ không bao giờ cần xác thực người dùng.
Làm thế nào để hai giải pháp so sánh về:
- Bảo vệ
- sự mạnh mẽ
- khả năng mở rộng
- dễ sử dụng
Hoặc có thể bạn sẽ đề xuất một giải pháp khác mà tôi chưa đề cập ở đây?
Tôi thích giải pháp số 1 tốt hơn nhưng chưa tìm thấy nhiều triển khai mặc định sẽ bảo đảm cho tôi trong thực tế là tôi đang đi đúng hướng.
Tôi hy vọng câu hỏi của tôi không bị đóng cửa. Tôi thực sự không biết nơi nào khác để hỏi nó.
Cảm ơn trước