Tôi có một ứng dụng web cần cho phép người dùng sử dụng các webclients khác nhau (trình duyệt, ứng dụng di động gốc, v.v.) để đăng ký. Sau khi đăng nhập, họ có thể truy cập nội dung bị hạn chế hoặc nội dung của riêng họ (như mục họ tạo, v.v.).jax-rs xác thực và cấp phép webservice còn lại
Những gì tôi đã làm như vậy cho đến nay: Tôi tạo ra một jax-rs còn lại webservice (Tôi đang lưu trữ ứng dụng của tôi trên glassfish) mà đưa ra phương án sau:
- đăng ký - sử dụng POST của mình tên mong muốn/mật khẩu/email/etc; nếu tên người dùng/email là duy nhất, mục nhập cho người dùng này được tạo trong cơ sở dữ liệu (tôi đang sử dụng Hibernate để kiên trì)
- thông tin đăng nhập - tên người dùng và mật khẩu của người dùng POST. Nếu chúng được chấp nhận, một UUID sẽ được tạo và trả về cho người dùng (điều này sẽ được sử dụng như một mã thông báo cho các yêu cầu trong tương lai). Tôi có một bảng gọi là logedusers, với userID, token, validSince dưới dạng cột.
Đây là nơi nó gây nhầm lẫn cho tôi.
Giả sử tôi có phương thức khác, getUserEntries, sẽ trả về tất cả các mục nhập do người dùng tạo. Để làm cho điều này rõ ràng hơn, sẽ có một bảng Entry với các trường sau: entryId, userId, văn bản.
Cách tiếp cận tốt nhất ở đây là gì?
gì tôi làm bây giờ, là tôi thực hiện một yêu cầu get và vượt qua trong các dấu hiệu như thế này:
localhost:8080/myApp/getUserEntries?token=erf34c34
Sau đó, nếu thẻ có giá trị, tôi nhận được userID từ bảng logedusers Döïa trên userId đó, nhận tất cả các mục nhập và trả về chúng dưới dạng json.
Something như thế này:
@GET
@Path("getUserEntries")
@Produces(MediaType.APPLICATION_JSON)
public Response getUserEntries(@QueryParam("token") String token) {
String userId=getUserIdFromToken(token);
if (userId == null){
return Response.status(Response.Status.UNAUTHORIZED).build();
} else {
//get some data associated with that userId, put it in the response object and send it back
return Response.ok().entity(response).build();
}
}
Tuy nhiên, những gì xảy ra nếu tôi có nhiều phương pháp mà cung cấp dữ liệu nếu chúng được gọi bởi một người dùng hợp lệ?
Tôi phải thực hiện việc kiểm tra này ở đầu mỗi phương pháp.
Tôi muốn làm cho quá trình cấp phép này trong suốt
Vì vậy, hai câu hỏi lớn ở đây:
- là thiết kế này ok? Toàn bộ xác thực với người dùng/pass, máy chủ tạo và lưu trữ và gửi mã thông báo cho người dùng, người dùng gửi mã thông báo về các yêu cầu trong tương lai.
- Tôi phải làm gì nếu tôi có nhiều điểm cuối cần xác định danh tính của người dùng đang gọi? Tôi có thể đánh dấu chúng bằng một số chú thích hay không, sử dụng một số nhà cung cấp bảo mật/trình xác thực (nơi tôi có thể thêm logic của riêng mình để xác thực - ví dụ: kiểm tra xem mã thông báo không cũ hơn 5 ngày, v.v.).
Cảm ơn