Làm thế nào tôi có thể mã một cuộc gọi jquery ajax() (ví dụ XMLHttpRequest) để bảo tồn các session ID (ví dụ như gửi cookie 'jsessionID' đã có trong các tập tin cookie của trình duyệt)Tái sử dụng jsessionId trên XMLHttpRequest ajax sử dụng jquery
bối cảnh của chúng tôi:
- Hai java ứng dụng dựa trên web
- SSO cơ chế đăng nhập tài khoản vào cả hai ứng dụng (ví dụ có phiên 101 với ứng dụng A và phiên 202 với ứng dụng B)
- Một pplication "A" sử dụng javascript (jquery) để làm cho phần còn lại các cuộc gọi đến các ứng dụng B
- Application B thực hiện API còn lại trong Java jersey (fwiw)
- Tất cả GET và "bài viết dạng cũ-học" từ ứng dụng A đến B kết nối đến cùng một phiên # 202 trên "phiên B"
- XmlHttpRequests (ví dụ các cuộc gọi jquery 'ajax()') không sử dụng lại phiên # 202. Mỗi XmlHttpRequest nhận phiên mới
Tại sao phiên mới?
Lý do: XmlHttpRequest không chuyển bất kỳ cookie nào vào ứng dụng B. Bộ chứa Servlet đặt jsessionid trong cookie. Server không có được jsessionid
Ngược lại, JSONP gọi (mà tự động tạo < script src = "http: //server/b/page.x" >) làm vượt qua cookie.
Những câu hỏi
- cách dễ nhất để có được XMLHttpRequest ajax gọi để vượt qua id phiên (cookies) với mục tiêu ứng dụng là gì?
- Bất kỳ tham khảo nào tốt về ajax, cookie, xmlhttprequest và REST?
- Có ai có thể khuyên bạn nên đọc về thiết kế và xác thực API REST không?
Sessions Web, Nhà nước, và xác thực
Tôi biết phần còn lại là nghĩa vụ phải được quốc tịch, và tái sử dụng phiên web có vẻ hơi mỏng manh (ví dụ như trái ngược với sử dụng OAuth và xác thực thẻ, cũng như netflix)
Đây là lần lặp đầu tiên và chúng tôi đã gần đạt được mọi thứ "hoạt động". Điều này làm việc tốt với JSONP, nhưng các bài viết XmlHttpRequest không thành công.
cảm ơn trước
Cập nhật:
Một câu hỏi ngây thơ thực sự.
Nó chỉ ra rằng đăng qua trang web qua xmlhttprequest/ajax có các vấn đề bảo mật vốn có và giải pháp. Firefox, ví dụ, sẽ không chuyển cookie với XmlHttpRequest trừ khi bạn thêm các tiêu đề đặc biệt.Firefox sau đó sẽ thực hiện 'kiểm tra trước chuyến bay' (tức là một cuộc gọi OPTIONS http) đến máy chủ để xem "điều này có ổn không?". Máy chủ của bạn cần trả lời cuộc gọi "OPTIONS" cho biết "yes it's ok" trước khi firefox thực hiện "bài đăng với cookie" của bạn.
IE và Firefox giải quyết các vấn đề này khác nhau (ví dụ: một chút như javascript vào khoảng năm 1998). Tôi không biết những gì IE làm, nhưng đã sống qua năm 1998, chúng tôi không muốn thực sự đi xuống con đường đó nếu có thể.
Chúng tôi đã mã hóa một giải pháp thay thế.
Không ai trong nhóm của chúng tôi biết điều này khi chúng tôi bắt đầu viết mã. (Ví dụ: "jsonp làm việc rất lớn trong nguyên mẫu; mọi thứ khác cũng nên")
Tài liệu tham khảo: Làm thế nào Mozilla giải quyết vấn đề này (http header và kiểm tra preflight) https://developer.mozilla.org/En/HTTP_access_control
Chữ thập xứ Resource Sharing: http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing
Bạn có thể mô tả cách giải quyết mà bạn đã đề cập không? – jmend
Chúng tôi đã chuyển mã thông báo xác thực sso dưới dạng thông số yêu cầu và sửa đổi phía máy chủ để kiểm tra tham số này. Nó ngửi thấy mùi một chút, nhưng rất nhất quán và đơn giản. Chúng tôi đã làm * không * cố gắng để vượt qua xung quanh jsessionId tomcat như một tham số như vậy sẽ không hoạt động. – user331465
Cảm ơn, điều đó có ý nghĩa. – jmend