2015-07-28 25 views
7

Tôi đang triển khai OAuth (sử dụng rauth) và sẽ cung cấp mã thông báo JWT (sử dụng bình-jwt), giao diện người dùng javascript (Angular1). Tôi đã thực hiện nó cho ứng dụng dựa trên cookie/phiên cổ điển. Nó hoạt động. Bây giờ tôi muốn làm điều đó với các thẻ JWT.Cách cung cấp mã thông báo JWT của người dùng sau khi chuyển hướng nhà cung cấp OAuth?

Nếu tôi hiểu chính xác, người dùng được chuyển hướng đến nhà cung cấp (ví dụ: Google), đăng nhập vào tài khoản, máy chủ và nhà cung cấp của tôi thực hiện phép thuật, sau đó người dùng chuyển hướng nhà cung cấp quay lại trang của tôi. Bây giờ tôi đã có hồ sơ người dùng và kết thúc phần OAuth. Với phiên bình thường, bạn cung cấp cookie của người dùng và phần còn lại của công cụ để thiết lập phiên, sau đó chuyển hướng anh ấy đến trang chủ.

Đây là nơi tôi bị kẹt. Có cách nào tốt để cung cấp mã thông báo JWT cho người dùng sau khi nhà cung cấp gửi lại cho anh ta không? Cung cấp cho người dùng dưới dạng cookie khi chuyển hướng đến trang chủ? Đặt nó vào tiêu đề? Theo như tôi biết tôi cần javascript để lưu mã thông báo vào LocalStorage/SessionStorage.

Trả lời

6

Vào cuối ngày, người dùng sẽ được chuyển hướng trở lại ứng dụng của chúng tôi, nơi trang hiện cần được hiển thị. Tùy chọn duy nhất tôi thấy là trả lại JWT dưới dạng cookie vì các tiêu đề phản hồi không thể truy cập được trong Javascript & nơi duy nhất khác sẽ nhúng vào DOM trong đó sẽ mở nó lên các cuộc tấn công CSRF.

Khi trình duyệt được chuyển hướng từ nhà cung cấp OAuth, trình duyệt sẽ chỉ có mã truy cập có thể được trao đổi cho mã thông báo truy cập ở phía máy chủ. Nhưng thực hành tốt nhất cho biết bạn cần giữ bí mật mã thông báo truy cập đó (không chuyển lại mật khẩu cho trình duyệt).

Có rất nhiều tranh luận về JWT trong cookie so với lưu trữ cục bộ/phiên nhưng trong trường hợp sử dụng này, tôi không thấy bất kỳ tùy chọn nào khác ngoài việc sử dụng cookie. Tất cả các trường hợp sử dụng tôi đã thấy mô tả bằng cách sử dụng bộ nhớ trình duyệt giả sử một yêu cầu XHR đang được thực hiện để có được JWT. Nhưng đây không phải là một tùy chọn trong luồng OAuth vì toàn bộ trình duyệt vừa được chuyển hướng trở lại ứng dụng của chúng tôi.

Tôi không thấy tùy chọn khác (đối với trường hợp sử dụng OAuth) ngoài việc giữ JWT trong cookie được sử dụng cho các cuộc gọi API trong tương lai. Nhưng có lẽ tôi đang thiếu một cái gì đó.

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