2016-09-13 8 views
8

मैं अपने आवेदन पर स्प्रिंग सोशल का उपयोग करने की कोशिश कर रहा हूं और मैंने देखा कि मूल 'OAuth2' राज्य पैरामीटर हमेशा मेरे ऐप पर शून्य है।मूल 'OAuth2' स्थिति पैरामीटर को org.springframework.social.connect.web.ConnectSupport में शून्य होने का कारण क्या हो सकता है?

org.springframework.social.connect.web.ConnectSupport नीचे के लिए देखें स्प्रिंग सामाजिक स्रोत कोड:

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;  
} 

किसी को भी कृपया मदद कर सकते हैं?

संपादित:

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 

संपादित 2: मैं देख रहा हूँ राज्य पैरामीटर वापस फेसबुक द्वारा पारित किया जा रहा करने के

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

उत्तर

3

यह पता चला कि इस मुद्दे को इस तथ्य है कि मैं हेडर पर भरोसा था की वजह से किया गया था:

आप इसे की तरह कुछ से मिलना चाहिए।

निम्नलिखित वसंत सत्र विन्यास सेम बाहर टिप्पणी द्वारा:

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

OAuth2 राज्य पैरामीटर मुद्दा हल कर दिया गया था।

पीएसअब मैं वसंत सामाजिक वसंत सत्र के अपने मौजूदा विन्यास के साथ काम करने के लिए पाने के लिए एक रास्ता खोजने के लिए मिल गया है ...

संपादित: मैं (वसंत सत्र की ओर) HeaderHttpSessionStrategy रखने के लिए और पाने में कामयाब रहे

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

क्या मुझे हेडर और कस्टम सत्र दोनों रणनीतियों को रखना चाहिए? मुझे एक ही मुद्दे का सामना करना पड़ रहा है। – gschambial

0
: वैसे, अपवाद मैं पीछा कर रहा है

जो आप फेसबुक से प्राप्त कर रहे हैं वह एक अनुरोध विशेषता नहीं है, यह एक अनुरोध पैरामीटर है। सत्र प्रबंधन करने के लिए - - के रूप में कुकीज़ का विरोध करने के

request.getParameter("state") 
+0

हाय रिकार्डो, उपर्युक्त (मेरी पोस्ट) वास्तव में वसंत सामाजिक से स्रोत कोड है।मैं बस सोच रहा था कि राज्य को सेट और पुनर्प्राप्त करने के लिए उपयोगकर्ता के पक्ष में विशेष कॉन्फ़िगरेशन चरण क्या लेना है ... – balteo

0

चारों ओर इस काम करें और देखें कि आपके काम का: यह (वसंत सामाजिक पक्ष पर) अपने ही SessionStrategy को लागू करने के रूप में इस से काम करने के लिए करने के लिए

मेरी आश्चर्य है कि मैंने 'गुप्त' ब्राउज़र में एप्लिकेशन खोला और सब कुछ काम किया। बस असे ही। मुझे लगता है कि कुछ कैश हो गया था और इस मुद्दे का कारण बन रहा था।

मैं आज इस मुद्दे में भाग गया, मेरा आवेदन पूरी तरह से ठीक काम कर रहा था। मैंने बस कुछ घंटों के लिए ब्रेक लिया और जब मैंने इसे फिर से चलाया तो उसने 'ओएथ 2' राज्य 'पैरामीटर के बारे में शिकायत करना शुरू कर दिया है या मेल नहीं खाता है।' राज्य परम को पहले सत्र में रखा जाता है तो अनुरोध फेसबुक पर जाता है और अनुरोध उसी राज्य परम के साथ आता है, लेकिन जब वसंत राज्य परम पाने के लिए सत्र वस्तु की तलाश में है, तो यह सत्र नहीं ढूंढ रहा है। मुझे लगता है कि यह सत्र नहीं ढूंढ रहा है क्योंकि जब अनुरोध वापस आता है तो यह सोचता है कि यह एक अलग क्लाइंट (या मेजबान) है, भले ही पुराने HttpSession ऑब्जेक्ट अभी भी मौजूद है। कंटेनर प्रति ग्राहक एक HttpSession रखता है।

संबंधित मुद्दे