2016-09-13 24 views
8

Uygulamamda Spring Social'ı kullanmaya çalışıyorum ve orijinal 'OAuth2' durum parametresinin her zaman uygulamanızda geçersiz olduğunu belirlerken farkettim.Orijinal 'OAuth2' durum parametresinin org.springframework.social.connect.web.ConnectSupport öğesinde null olması ne olabilir?

altına org.springframework.social.connect.web.ConnectSupport için

bakınız Bahar Sosyal kaynak kodu:

private void verifyStateParameter(NativeWebRequest request) { 
    String state = request.getParameter("state"); 
    String originalState = extractCachedOAuth2State(request);//Always null... 
    if (state == null || !state.equals(originalState)) { 
     throw new IllegalStateException("The OAuth2 'state' parameter is missing or doesn't match."); 
    } 
} 

private String extractCachedOAuth2State(WebRequest request) { 
    String state = (String) sessionStrategy.getAttribute(request, OAUTH2_STATE_ATTRIBUTE); 
    sessionStrategy.removeAttribute(request, OAUTH2_STATE_ATTRIBUTE); 
    return state;  
} 

kimse yardım eder misiniz?

düzenlemek:

Request URL:https://www.facebook.com/v2.5/dialog/oauth?client_id=414113641982912&response_type=code&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fconnect%2Ffacebook&scope=public_profile&state=0b7a97b5-b8d1-4f97-9b60-e3242c9c7eb9 
Request Method:GET 
Status Code:302 
Remote Address:179.60.192.36:443 

düzenlemek 2: Ben devlet parametre facebook tarafından geri geçirilen görüyorum

Exception while handling OAuth2 callback (The OAuth2 'state' parameter is missing or doesn't match.). Redirecting to facebook connection status page. 

cevap

3

Bu sorunu ben başlıklarını güvenerek olmasından kaynaklandığını ortaya çıktı:

Sen gibi bir şey bunu almalısınız. Aşağıdaki bahar toplantısı yapılandırma fasulye dışarı yorum olarak

:

@Bean 
public HttpSessionStrategy sessionStrategy(){ 
    return new HeaderHttpSessionStrategy(); 
} 

OAuth2 devlet parametre sorunu sıralandı.

P.S.Şimdi Bahar Sosyal Bahar Oturum benim şimdiki yapılandırma ile çalışmak için almak için bir yol bulmalıyız ...

Düzenleme: I (bahar toplantısı tarafında) HeaderHttpSessionStrategy tutmak ve başardı Bu sizin için çalışıyorsa

public class CustomSessionStrategy implements SessionStrategy { 

    public void setAttribute(RequestAttributes request, String name, Object value) { 
     request.setAttribute(name, value, RequestAttributes.SCOPE_SESSION); 
    } 

    public Object getAttribute(RequestAttributes request, String name) { 
     ServletWebRequest servletWebRequest = (ServletWebRequest) request; 
     return servletWebRequest.getParameter(name); 
    } 

    public void removeAttribute(RequestAttributes request, String name) { 
     request.removeAttribute(name, RequestAttributes.SCOPE_SESSION); 
    } 
} 
+0

Hem üstbilgiyi hem de özel oturum stratejilerini tutmalı mıyım? Aynı konuyla yüzleşiyorum. – gschambial

0
: Bu arada, ben olsun istisna şudur

Facebook'tan aldığınız şey bir istek özelliği değil, bir istek parametresi. oturumu yönetmek - çerezler aksine -

request.getParameter("state") 
+0

Merhaba Riccardo, Yukarıdaki (post) aslında Spring Social kaynak kodudur.Durumun düzgün bir şekilde ayarlanması ve alınabilmesi için kullanıcı tarafında hangi özel yapılandırma adımını atmam gerektiğini merak ettim ... – balteo

0

etrafında bu işi deneyin ve görün: aşağıdaki gibi (ilkbahar sosyal tarafta) kendi SessionStrategy uygulayarak çalışmak

için benim sürpriz bir 'gizli' tarayıcıda uygulama açtım ve her şey çalıştı. Aynen böyle. Bir şey önbelleğe alınmadan önce sorun olduğunu düşünüyorum.

Bugün bu konuyla karşılaştım, Uygulamam gayet iyi çalışıyordu. Birkaç saatliğine ara verdim ve tekrar koştuğumda 'OAuth2' durumu 'parametresi eksik veya eşleşmiyor' diye şikayet etmeye başladı. Durum parametresi ilk olarak oturuma girer, ardından istek facebook'a gider ve istek aynı durum paramiyle geri döner, fakat ilkbaharda durum paramını almak için oturum nesnesini ararken, bu oturumu bulamaz. Oturumu bulamadığını düşünüyorum çünkü istek geldiğinde, eski HttpSession nesnesi hala mevcut olsa bile farklı bir istemci (veya ana bilgisayar) olduğunu düşünüyor. Kapsayıcı, istemci başına bir HttpSession tutar.