2012-04-06 27 views
5

Ok, Có vẻ như tôi đã nhầm lẫn với câu hỏi ban đầu của mình. Vì vậy, đây là một số chỉnh sửa. Câu trả lời vẫn được áp dụng, bởi vì chuyển hướng thứ hai bị dừng lại khi có sự thay đổi trong giao thức thành HTTPS (SSL).Trình duyệt không theo chuyển hướng từ phản hồi AJAX (phản hồi do PHP tạo ra bằng cách sử dụng xác thực CAS)

Trong trường hợp của tôi, tôi có chuyển hướng xảy ra nhiều lần và trình duyệt không thực hiện theo chuyển hướng thứ hai. Chuyển hướng đầu tiên được theo sau nhưng trả về lỗi.

Tôi tiếp tục đọc rằng các câu trả lời JavaScript AJAX có chứa chuyển hướng được tự động theo dõi, nhưng có vẻ như không phải trong trường hợp của tôi. Chuyển hướng đầu tiên được tự động theo sau bởi trình duyệt và chuyển hướng đầu tiên được trả lại mà không theo chuyển hướng thứ hai trong tiêu đề. Vấn đề của tôi là tôi muốn tất cả các chuyển hướng được tự động theo sau bởi trình duyệt.

Chuyển hướng là một phần của thư viện phpCAS. Tôi có một API được viết bằng PHP để kiểm tra xác thực người dùng, mỗi lần, trước khi trả lại kết quả.

Đây là chuỗi. Điều quan trọng cần lưu ý là trình duyệt trả về phản hồi thứ hai, sau khi theo dõi 1 chuyển hướng. Tôi thích nó đã đi tất cả các cách và trả lại phản ứng cuối cùng khi tôi thực hiện một cuộc gọi AJAX đến localhost/example/api.

localhost/example

  • cuộc gọi localhost/example/api sử dụng jQuery.ajax()

đáp ứng 1: localhost/example/api

  • Chuyển hướng để https://localhost/accounts/cas/login?service=api.example.com&gateway=true (sử dụng SSL).

đáp ứng 2: (SSL) localhost/tài khoản/cas/đăng nhập dịch vụ = api.example.com & cổng = true

  • Khi phím truy vấn 'cửa ngõ' là hiện nay, đăng nhập chỉ đơn giản là chuyển hướng trở lại URL được cung cấp bởi phím 'dịch vụ' có hoặc không có vé (để báo hiệu cho dịch vụ mà người dùng đăng nhập hay không).

đáp ứng 3: localhost/api vé = VÉ

  • Thẩm tra vé và chuyển hướng trở lại với chính nó mà không có vé.

đáp ứng 4: localhost/api

  • Lần này khách hàng CAS nhìn vào $ _SESSION để nhớ những gì các vé đã được, và sau đó xử lý yêu cầu API trở JSONP.

Không có lý do cụ thể nào tôi đang sử dụng CAS qua OpenID hoặc OpenAuth (orization).CAS chỉ là mô-đun xác thực đầu tiên mà tôi có thể làm việc trong WordPress. Tôi mở cửa cho các đề xuất về sử dụng thư viện xác thực khác nhau, CMS, khung công tác, v.v. Mặc dù, hy vọng của tôi là hoàn thành dự án này. Vì vậy, ít công cụ lại càng tốt.

+0

Bạn biết gì, tôi đã đăng câu hỏi này sau khi tìm kiếm trên StackOverflow trong một thời gian. Sau đó, sau khi đăng câu hỏi tôi thực hiện tìm kiếm khác và tìm một câu hỏi tương tự trên StackOverflow. http://stackoverflow.com/questions/2961051/cas-authentication-and-redirects-with-jquery-ajax –

+0

Dường như vì phản hồi thứ hai sử dụng giao thức khác (SSL) và tên miền phụ là khác nhau, sau đó sẽ gây ra lỗi. Tôi đoán điều đó có nghĩa là trình duyệt IS theo sau các chuyển hướng, không phải khi một cái gì đó thay đổi (hoặc là prototocol? Hoặc subodmain? Hoặc cả hai?), Và dữ liệu không được trả về trong phản hồi (nếu không, có lẽ một phản hồi JSONP có thể được thêm vào thời điểm đó. .. Tôi sẽ phải thử điều đó ... thở dài.) –

Trả lời

6

Như sau này bạn đã thấy mình khi bạn thêm vào nhận xét của mình, yêu cầu ajax phải tuân theo same origin policy.

Có, bạn có thể sử dụng JSONP - tuy nhiên, nếu bạn đủ may mắn để chỉ hỗ trợ IE8 trở lên, thì CORS có thể là giải pháp tốt hơn.

Về cơ bản, tiêu đề bổ sung như

access-control-allow-origin: http://api.example.com 
access-control-allow-credentials: true 

câu trả lời máy chủ của bạn, bạn có thể làm việc xung quanh chính sách gốc cây thập tự.

Cũng thấy điều này jQuery ticket để làm cho nó hoạt động tốt với jQuery.

+0

Thật tuyệt, tôi có thể làm điều đó vì tôi có quyền truy cập vào tất cả các tên miền phụ. Điều đó có hiệu quả với tất cả các trình duyệt không? –

+0

@BiagioArobba không hoàn toàn, IE8 +, opera 12+, xem: http://caniuse.com/#search=cors – Razor

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