2013-02-26 21 views
6

Temel olarak, bir kez doğrulandığında bir Oauth2 işlemini başlatan bir giriş formum var. Hangi erişim belirteçleri alır son yönlendirme yapmak zorunda kadar kusursuz çalışır. Giriş akışı aşağıdaki gibi için /user/oauth/auth yeniden yönlendirir ve sonra Oauth redirect_uri /user/oauth/redirect yönlendirir. Redirect_uri asla olmaz ve istek sunucuya asla vurmaz.Safari Ajax cors, yönlendirmeyi takip etmiyor

Bir Ajax isteği kullanarak bu yönlendirmeye vurursam, cors düzgün çalışır ve beklenen yanıtı alırım, yalnızca iki kez yeniden yönlendirirsem görünebilir.

sunucu geçen URL vurmak asla bu tepkileri

[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 

göstermektedir. Sunucu görüyorum Web Denetçisi'nde isteği

[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 

isteği görür ama jQuery kullanıyorum bir

enter image description here

gibi ölür dışında Chrome, IE yılında akışı FF aynıdır 1.9 ve burada ajax isteği (Ben denemek ve çalışması için buraya güneş altında her seçeneği var verilmiş.)

$.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 ilk p gibi bir seçenek değildir ost https üzerinden gönderilir ve bir POST isteği olması gerekir. Yine IE dahil olmak üzere tüm diğer tarayıcılar gayet iyi çalışıyor, başarı yanıtını ateşliyor.

Safari, Durum Menüsü 0'ı ve klasik Origin ilke hataları olan ancak uri'yi standart bir ajax isteğinde oturum açmayı engelleyen bir hata olan hatayı tetikler. Bir erişim kontrolü sorunu olduğundan şüphe duyuyorum çünkü eğer Safari sadece ateş ederse çağrı işe yarayacaktı.

Yeniden yönlendirme istek başlıklarıyla ilgili bir şey olduğundan ve Safari'nin isteği durdurduğundan eminim. İlk başarılı 302 onlar bu

Access-Control-Request-Method: GET 
Origin: http://192.168.1.5:9090 
Access-Control-Request-Headers: origin, accept-encoding, accept-language 

benziyor Ama yönlendirme uri onlar (o nedenini başarısız oluyor neden olarak mantıklı olan oraya gönderiliyor hiçbir erişim denetim başlık olduğu ama neden ??) şuna benzer

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 

cevap

5

Eh bunun bir Safari şeydir gibi, sadece ilk yönlendirmeyi takip edecek görünüyor. Apple, bunun HTML teknik özelliklerinin yazıldığını iddia ediyor. Yani .... /user/login üzerinde yönlendirmek için akışımı yeniden işlemek ve hemen oauth işlemini başlatmak zorunda kaldı.

+1

"Apple, bunun, HTML teknik özelliklerinin yazılma şekli olduğunu iddia ediyor" Bunun kaynağını alıntılayabilir misiniz? – hrdwdmrbl

+0

Bu gerçekten geç cevap için özür dilerim. Konuştuğum bir mühendis vardı. Ancak bu gerçekten HTML5 özelliğidir. İsteği ayarlama Orijin değeri, http://www.w3.org/TR/cors/ 7.1.7 bölümünün 6. adımına bakınız. –

+0

JSONP'nin sizin için bir seçenek olmadığını, ancak buna rastlayan diğer kullanıcılar için ... Alan adlarında birden çok yönlendirme ile Safari'de çalıştığını onaylayabilirim. – james

İlgili konular