Tôi có dịch vụ JAX-RS nơi tôi muốn tất cả người dùng truy cập dịch vụ của mình, nhưng chỉ những người có quyền xem kết quả. Vai trò dựa trên bảo mật và hiện tại REALMS và phương pháp atuhentication không phù hợp với yêu cầu của tôi.Ủy quyền JAX-RS tùy chỉnh - sử dụng JWT trong mỗi yêu cầu
Ví dụ:
- người dùng xác thực đối với một dịch vụ REST và tôi gửi cho anh ta JWT mã thông báo với ID của mình
- người dùng yêu cầu tài nguyên khác và gửi JWT của mình với ID của mình trong mỗi yêu cầu
- tôi kiểm tra id người dùng của anh ấy (từ JWT) và nếu logic nghiệp vụ trả về kết quả tôi gửi lại, thì tôi gửi tập kết quả trống hoặc trạng thái HTTP cụ thể
Câu hỏi là: Tôi nên kiểm tra ở đâu ID người dùng, trong một số bộ lọc riêng biệt, ngữ cảnh bảo mật hoặc trong mọi phương thức REST thực hiện? Làm thế nào để cung cấp các phương thức REST với ID này, SecurityContext có thể được tiêm vào mọi phương thức sau khi yêu cầu lọc theo ID không?
Tôi đang sử dụng GlassFish 4.1 và triển khai Jersey JAX-RS.
nhờ trả lời của bạn. Tôi nghĩ rằng tôi có thể sử dụng ContainerRequestFilter, nhưng tôi không cần cho Vai trò và SecurityContext cho yêu cầu của tôi. Có quá đơn giản để sử dụng bộ lọc servlet, và cho mỗi yêu cầu vào tài nguyên REST của tôi, tôi sẽ thực hiện unmarshaling của tiêu đề JWT đã gửi trước đó, trích xuất thông tin người dùng từ nó và chuyển nó tới các phương thức dịch vụ để xác định cấp độ của người dùng bên trong mỗi mehod? Điều này có vẻ giống như một giải pháp thực dụng đơn giản mà chỉ cần làm việc .. – D00de
Khá nhiều những gì bạn có thể làm trong một bộ lọc servlet, bạn có thể làm trong ContainerRequestFilter. Nhưng với thứ hai, bạn có quyền truy cập vào ứng dụng Jersey –
cảm ơn, tôi đã thực hiện giải pháp của bạn bằng cách tiêm dữ liệu JWT cho người dùng chính và sau đó lấy nó từ SecurityContext được tiêm vào mọi phương thức REST mà tôi có. Tôi đã bỏ phiếu và chấp nhận sự giúp đỡ của bạn. – D00de