Đối với ứng dụng MVC CQRS của chúng tôi, ban đầu chúng tôi bắt đầu giữ tất cả thông tin liên quan đến người dùng trong miền và, như ai đó đã đề cập, có RegisterUserCommand và UserRegisteredEvent. Sau khi lưu trữ thông tin người dùng trong miền, sự kiện đó đã được xuất bản và chọn ở bên đọc, cũng tạo ra một người dùng và tạo ra tất cả các băm mật khẩu, v.v. Sau đó chúng tôi đã thực hiện xác thực ở phía đọc: bộ điều khiển sẽ tạo gọi ra 'dịch vụ xác thực mô hình đã đọc' để xác thực.
Sau đó xuống đường, chúng tôi đã hoàn toàn hoàn nguyên việc này. Chúng tôi cần truy cập vào thông tin liên quan đến người dùng để xây dựng bảo mật cho phép các lệnh của chúng tôi thực hiện ở phía xử lý lệnh (ứng dụng của chúng tôi là ứng dụng được phân phối gửi lệnh 'không đồng bộ và' không đồng bộ đến hàng đợi) một người nghe tự trị ở phía bên kia). Các thành phần bảo mật sau đó cần một tham chiếu đến tên miền của chúng tôi để đi và nhận được hồ sơ người dùng, dẫn đến vấn đề tham khảo cồng kềnh.
Chúng tôi quyết định đưa công cụ bảo mật người dùng vào cơ sở dữ liệu riêng biệt mà chúng tôi cho là nhiều hơn một thành phần trung tâm, thay vì thuộc về miền hoặc đọc mô hình. Chúng tôi vẫn duy trì người dùng hồ sơ thông tin liên quan trong miền và đọc mô hình (ví dụ: tên công việc, URL tài khoản twitter, v.v.), nhưng tất cả nội dung liên quan đến bảo mật, như băm mật khẩu đều được lưu trữ trong cơ sở dữ liệu trung tâm này. Đó là sau đó có thể truy cập với một dịch vụ, đó là có sẵn cho cả hai MVC và tác giả lệnh.
Chúng tôi không thực sự phải thay đổi bất kỳ thứ gì trong giao diện người dùng cho trình tái cấu trúc này, vì chúng tôi vừa gọi dịch vụ để đăng ký người dùng từ trình xử lý lệnh người dùng đăng ký. Nếu bạn định thực hiện theo cách đó, bạn cần cẩn thận ở đây để làm cho các hoạt động liên quan đến dịch vụ người dùng của bạn không hoạt động. Điều này là để bạn có thể cung cấp cho các lệnh của bạn cơ hội được thử lại mà không có tác dụng phụ, bởi vì bạn đang cập nhật 2 nguồn thông tin (ES và cơ sở dữ liệu người dùng).
Cuối cùng, bạn có thể sử dụng các nhà cung cấp thành viên cho thành phần trung tâm này, nhưng có thể có pitfalls với điều đó. Chúng tôi đã kết thúc chỉ bằng văn bản của riêng mình - nó khá đơn giản để làm. Bài viết đó liên kết đến this, cung cấp ví dụ tốt về cách triển khai.
Giống như cách bạn thực hiện trong các hệ thống dựa trên tin nhắn, AFAIK. Bạn dường như kết hợp ủy quyền và xác thực. Bạn đang cố gắng bảo mật cái gì? –
Tôi không trộn chúng, tôi hỏi về cả hai, thực sự :) Có vẻ vấn đề chính của tôi sau đó là tôi không biết làm thế nào nó được thực hiện trong các hệ thống dựa trên tin nhắn;) – tuxbear