Thảo luận thuyết phục thực hiện.Luồng OAuth2 từ máy chủ tài nguyên đến một máy chủ tài nguyên khác
- Đường màu đen cho biết dịch vụ nào được máy chủ xác thực bảo vệ.
- dòng màu xanh lá cây thể hiện sự tương tác giữa các dịch vụ (khách hàng, và các dịch vụ đơn đặt hàng cần phải đi qua các dịch vụ dữ liệu đó sẽ truy cập vào cơ sở dữ liệu. Dịch vụ độc lập không thích các dịch vụ khác)
- đường đỏ cho thấy một yêu cầu cụ thể chảy
- Dịch vụ dữ liệu không được tiếp xúc trực tiếp với bên ngoài và chỉ có thể được truy cập bởi các dịch vụ khác được phép làm như vậy.
Tôi giả định rằng khách hàng đã nhận được mã thông báo truy cập khi người dùng xác thực với máy chủ xác thực. Luồng nào được chọn (ẩn, mã ủy quyền, mật khẩu) là không thích hợp. Tôi muốn bắt đầu thảo luận từ điểm mà khách hàng đã nhận được mã thông báo truy cập.
Từ thời điểm đó trở đi, rõ ràng với tôi điều gì sẽ xảy ra khi khách hàng cần truy cập vào một máy chủ tài nguyên đơn lẻ.
- Make yêu cầu tài nguyên máy chủ và vượt qua mua thẻ máy chủ Resource
- xác nhận token (không liên quan như thế nào)
- Nếu hợp lệ, phục vụ theo yêu cầu.
Vì vậy, trong biểu đồ đó nếu khách hàng truy cập "Dịch vụ StandAlone" (không nói chuyện với bất kỳ máy chủ tài nguyên nào khác), luồng này rõ ràng đối với tôi.
Tôi gặp sự cố khi khách hàng theo đường màu đỏ trong biểu đồ. Vì vậy, tôi cần truy cập một dịch vụ (máy chủ tài nguyên) để trả lời các nhu cầu truy cập vào một dịch vụ khác (cũng là máy chủ tài nguyên). Làm thế nào để dòng chảy đi trong trường hợp đó?
Kịch bản 1.
- "Đơn hàng dịch vụ" được thiết lập cả hai như là một máy chủ tài nguyên và là một khách hàng.
- Khách hàng yêu cầu mã thông báo truy cập nhưng "Dịch vụ đơn đặt hàng" sẽ có một mã thông báo khác có thông tin đăng nhập của khách hàng của riêng họ để nói chuyện với "Dịch vụ dữ liệu".
Vấn đề ở đây như tôi thấy đó là tôi mất quyền người dùng. Tôi sẽ thực hiện yêu cầu đối với "Dịch vụ dữ liệu" với quyền "Dịch vụ đặt hàng" và không được phép của người dùng.
Kịch bản 2.
- "Đơn hàng dịch vụ" được thiết lập chỉ như là một máy chủ tài nguyên.
- khách hàng làm theo yêu cầu với người sử dụng thẻ và "dịch vụ Đơn đặt hàng" sẽ chuyển token cùng xuống đến "dịch vụ dữ liệu"
Ở đây tôi thực hiện với các điều khoản của người dùng nhưng bây giờ tôi thấy rằng tôi "dịch vụ dữ liệu "được tiếp xúc và mở cho bất kỳ dịch vụ nào khác. (Trên thực tế tôi không biết nếu OAuth2 cung cấp hạn chế như vậy. Giới hạn một khách hàng duy nhất đến các máy chủ tài nguyên cụ thể)
Kịch bản 3.
Ở đây tôi thấy một sự kết hợp của các kịch bản trên, nơi các "Đơn đặt hàng dịch vụ" sẽ cung cấp cả hai mã thông báo cho dịch vụ dữ liệu. Mã thông báo truy cập của người dùng để yêu cầu được thực hiện với quyền phù hợp và mã thông báo truy cập ứng dụng khách của "Lệnh dịch vụ" để tôi biết rằng dịch vụ được phép nói chuyện với "Dịch vụ dữ liệu".
Thực hiện
Tôi đang sử dụng khởi động mùa xuân và mùa xuân an ninh để thiết lập các thành phần OAuth2 tôi đã thấy ở trên. Tôi đã có một máy chủ auth, một máy chủ tài nguyên và một máy khách. Các khách hàng tại thời điểm này nói chuyện với một máy chủ tài nguyên mà không có yêu cầu được giao cho một máy chủ tài nguyên.
Tùy thuộc vào cách tiếp cận tốt nhất làm cách nào để tôi tiếp tục triển khai? Tôi cần phải thực hiện những thay đổi nào đối với máy chủ tài nguyên của mình để họ có thể nói chuyện an toàn với nhau?
Cảm ơn bạn đã dành thời gian