2015-02-14 15 views
5

IE'nin 303 yanıtını nasıl işlediği ile ilgili sorunları olan bir OAuth2 etkin sitem var. Akışta, 3 yönlendirmeler gerçekleşir.IE POST'ta 303 yönlendirmeyi yoksayar -> yönlendirme -> GET senaryosu

### Chrome/Firefox 
POST idp.com/login   (res 302 -> idp.com/authenticate) 
GET idp.com/authenticate (res 302 -> app.com/oauth2/callback) 
GET app.com/oauth2/callback (res 303 -> app.com/home) 
GET app.com/home 

### IE 
POST idp.com/login   (res 302 -> idp.com/authenticate) 
POST idp.com/authenticate (res 302 -> app.com/oauth2/callback) 
POST app.com/oauth2/callback (res 303 -> app.com/home) 
POST app.com/home 

IE nedense orijinal istek yöntemini koruyarak gibi görünüyor. En az 303 döndürerek sunucumdaki (app.com) orijinal POST yanıtından ayrılmayı denedim ancak bu sorunu çözmedi. RFC 2068 bir 303 - See Other yanıt için, şu bir farklı bir URI altında

isteğine yanıt bulunabilir onur gerektiğini ve bu kaynak üzerindeki GET yöntemi kullanılarak alınabilir GEREKEN belirtiyor beri bu beklenmedik bir durumdur. Bu yöntem öncelikle kullanıcı aracısını seçilen kaynağına yeniden yönlendirmek için POST ile etkinleştirilmiş komut dosyasının çıktısına izin vermek için vardır.

Başarısız bir 307 yanıt bile denedim. Burada neler olduğu hakkında bir fikri olan var mı?

+0

LinkedIn için OAuth yapılırken benzer bir davranış görmek - IE, Geri Almayı Geri Çağırmadır. –

+0

ilgili soru - http://stackoverflow.com/questions/9912200/post-redirect-get-with-internet-explorer ama yine de cevap yok –

cevap

0

LinkedIn OAuth ile benzer bir sorunla karşılaştığımda ve başvurumda, bunu özellikle belirsiz bir şekilde çözdüm. Geri arama adresimin POST yöntemine izin verdim ve daha sonra dahili olarak benim servlet uygulamasında bir GET çağrısı gibi davranıldı.

@RequestMapping(value = ApiValues.LINKEDIN_CALLBACK, method = RequestMethod.POST) 
public void doPost(HttpServletRequest request, HttpServletResponse response, 
     @RequestParam(value = "oauth_token", required = false) String tokenString, 
     @RequestParam(value = "oauth_verifier", required = false) String verifierString) throws ServletException, IOException { 

    handleCallBack(request, response, tokenString, verifierString); 
} 


@RequestMapping(value = ApiValues.LINKEDIN_CALLBACK, method = RequestMethod.GET) 
public void doGet(HttpServletRequest request, HttpServletResponse response, 
     @RequestParam(value = "oauth_token", required = false) String tokenString, 
     @RequestParam(value = "oauth_verifier", required = false) String verifierString) throws ServletException, IOException { 

    handleCallBack(request, response, tokenString, verifierString); 
} 

sadece IE (ve IE'nin eski sürümleri) bu sorunu sağlıyor gibi görünüyor kaydeden, Chrome, Firefox ve Safari, tüm spec göre GET yönlendirmek gibi görünüyor.

İlgili konular