2017-05-13 15 views
6

Tôi có API REST tốc độ nút trong đó tôi có thể thực hiện yêu cầu GET cho bộ điều khiển người dùng - /users/:id - trong đó :id là số id người dùng được lưu trữ trong cơ sở dữ liệu. Tôi cũng có một ứng dụng phía khách hàng React-Redux thực hiện cuộc gọi đến API. Để thực hiện yêu cầu, ứng dụng khách cần truy cập vào id người dùng, nhưng hiện tại tôi không chắc chắn cách tốt nhất để lưu trữ id người dùng ở phía máy khách.Lưu trữ User-Id trong ứng dụng phía máy khách để yêu cầu API

Để biết thêm ngữ cảnh, API của tôi gửi cho khách hàng JWT token khi đăng nhập giữ id người dùng; ứng dụng khách sẽ lưu mã thông báo trong localStorage. Khi khách hàng đưa ra yêu cầu, API xác minh rằng id người dùng trong mã thông báo đã giải mã khớp với Id chứa trong URL trước khi gửi phản hồi lại cho máy khách.

tôi thấy hai giải pháp tiềm năng:

  1. Giải mã token JWT trên máy khách và sử dụng người dùng id được lưu trữ trong thẻ bài để thực hiện cuộc gọi API. Tôi nghĩ rằng đây là một nguy cơ tiềm ẩn về bảo mật, vì tôi tin rằng tôi sẽ cần lưu trữ bí mật trên ứng dụng khách. Ngoài ra, bất kỳ ai có mã thông báo đều có thể truy cập vào thông tin của người dùng.
  2. API gửi id người dùng về xác thực và khách hàng lưu trữ nó trong localStorage. (Tôi không nghĩ rằng việc lưu trữ nó trong kho lưu trữ Redux sẽ hoạt động vì người dùng có thể làm mới, xóa trạng thái của id người dùng). Ý thức của tôi là đây không phải là phương pháp hay nhất, vì tôi không thấy nhiều ứng dụng khách hàng khác sử dụng phương pháp này.

Giải pháp nào tốt hơn, hoặc có cách tiếp cận nào khác mà tôi không xem xét?

Trả lời

1

Bạn nói đúng về lựa chọn # 1. Không bao giờ giải mã mã thông báo phía máy khách. Điều đó sẽ yêu cầu mã phía máy khách để biết "bí mật", sẽ hiển thị nó cho bất kỳ ai xem qua Javascript của bạn.

Tùy chọn # 2 là tốt, giả sử bạn vẫn gửi mã thông báo với mọi yêu cầu vì mục đích bảo mật. Để lưu trữ, có bạn phải lưu trữ nó trong một cookie hoặc trong localStorage, hoặc khi bạn nói nó sẽ bị mất khi làm mới.

Để lấy ID trong mã phía máy khách, hãy đọc mã phía máy khách của bạn đọc từ cookie/localstorage. Có thư viện cho điều đó; Ví dụ, cookie phản ứng đọc cookie. Hoặc bạn có thể làm điều đó mỗi khi bạn cần truy cập vào nó, hoặc bạn có thể đọc nó một lần trong khi tải trang ban đầu, và sau đó gửi nó vào kho lưu trữ Redux.

0

Trong /users/:id endpoint của bạn, bạn có thể kiểm tra để xem nếu một :id được cung cấp và sau đó nếu không muốn nói, trích xuất các id từ JWT thẻ của bạn nếu không sử dụng id đó đã được thông qua vào cuộc gọi API.

Nếu đó không phải là chấp nhận được, sau đó bạn có thể sử dụng tùy chọn # 2 nhưng sử dụng sessionStorage thay vì localStorage

+0

Trả lời tùy chọn đầu tiên của bạn: điều đó sẽ không tuân theo quy ước REST api? Về cơ bản nếu một id không được cung cấp, nó sẽ giống như '/ users /' bạn nói rằng nó sẽ lấy id từ token, nhưng get đến '/ users /' chỉ ra rằng client muốn lấy danh sách ALL users . – Nahro

Các vấn đề liên quan