Về cơ bản, tôi có biểu mẫu đăng nhập đã được xác thực khi bắt đầu quy trình Oauth2. Mà hoạt động hoàn hảo cho đến khi nó đã làm chuyển hướng cuối cùng mà được các thẻ truy cập. Luồng đăng nhập như sau POST tới /user/login
chuyển hướng đến /user/oauth/auth
rồi chuyển hướng đến chuyển hướng Oauth_uri /user/oauth/redirect
. Redirect_uri không bao giờ xảy ra và yêu cầu không bao giờ chạm vào máy chủ.Yêu cầu về trình duyệt Safari Ajax không theo chuyển hướng
Nếu tôi nhấn chuyển hướng đó bằng cách sử dụng một yêu cầu Ajax, cors hoạt động tốt và tôi nhận được phản hồi mong đợi nó dường như chỉ xảy ra nếu tôi chuyển hướng hai lần.
Máy chủ cho thấy những phản ứng
[I 130226 10:16:38 web:1462] 302 POST /user/login (192.168.1.5) 156.01ms (Session cookies set fine)
[I 130226 10:16:38 web:1462] 200 OPTIONS /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 1.86ms
302 GET /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 8.58ms
URL cuối cùng không bao giờ có được hit. Trong Chrome, IE, FF dòng chảy là như nhau ngoại trừ server thấy yêu cầu
[I 130226 10:16:38 web:1462] 302 POST /user/login (192.168.1.5) 156.01ms
[I 130226 10:16:38 web:1462] 200 OPTIONS /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 1.86ms
302 GET /user/oauth/auth?scope=&client_id=DemoApp&response_type=code&redirect_uri=http://192.168.1.5:8443/user/oauth/redirect/code (192.168.1.5) 8.58ms
[I 130226 10:27:12 web:1462] 200 GET /user/oauth/redirect/code?code=57497058fbbf6003310ea22d3902ac67 (192.168.1.5) 0.54ms
Trong Inspector web tôi thấy yêu cầu nhưng chết như một
Tôi đang sử dụng Jquery 1.9 và đây là yêu cầu ajax (cấp tôi đã có tất cả các tùy chọn dưới ánh mặt trời ở đây để thử và làm cho nó làm việc.)
$.ajax({
type: "POST",
url: reqUrl,
data: data,
dataType: "json",
success: function(data, textStatus) {
console.log(data);
alert('logged in');
},
error: function(e){
console.log(e);
},
complete: function(request, status) {
console.log("headers=" + request.getAllResponseHeaders());
},
statusCode: {
200: function(data) {
console.log('yup we got it.')
}
},
xhrFields: {
withCredentials: true
},
crossDomain: true,
async:true
});
JSONP không phải là một lựa chọn như p ban đầu ost được gửi qua https và phải là một yêu cầu POST. Một lần nữa tất cả các trình duyệt khác bao gồm IE đang hoạt động tốt, nó sẽ phản ứng thành công.
Safari kích hoạt mã trạng thái 0 và lỗi là lỗi chính sách gốc cổ điển nhưng chuyển hướng uri hoạt động trong yêu cầu ajax chuẩn bỏ qua thông tin đăng nhập. Tôi nghi ngờ đó là một vấn đề kiểm soát truy cập bởi vì cuộc gọi sẽ hoạt động nếu Safari chỉ bắn nó.
Tôi chắc chắn rằng nó có liên quan đến các tiêu đề yêu cầu trên chuyển hướng và Safari đang dừng yêu cầu. Vào ngày đầu tiên thành công 302 họ trông như thế này
Access-Control-Request-Method: GET
Origin: http://192.168.1.5:9090
Access-Control-Request-Headers: origin, accept-encoding, accept-language
Nhưng trên uri chuyển hướng họ trông như thế này (có ý nghĩa là tại sao nó không gây ra không có tiêu đề kiểm soát truy cập được gửi nhưng tại sao ??)
Origin: http://192.168.1.5:9090
Accept-Encoding: gzip, deflate
Accept-Language: en-us
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, like Gecko) Version/6.0.2 Safari/536.26.17
Accept: */*
Referer: http://192.168.1.5:9090/login
"Apple tuyên bố rằng đây là cách thông số HTML được viết" Bạn có thể trích dẫn nguồn của mình không? – hrdwdmrbl
Xin lỗi vì câu trả lời thực sự muộn này. Đó là một kỹ sư tôi đã nói chuyện với công việc đó trên webkit. Nhưng nó thực sự là thông số HTML5. Đặt yêu cầu Xuất xứ thành null là một phần của thông số http://www.w3.org/TR/cors/ Xem bước 6 của phần 7.1.7. –
Tôi hiểu rằng JSONP không phải là một lựa chọn cho bạn, nhưng đối với những người khác gặp phải điều này ... Tôi có thể xác nhận rằng JSONP hoạt động trên Safari với nhiều chuyển hướng trên các tên miền. – james