2015-06-24 9 views
5

मुझे क्लाइंट ऐप @EnableOAuth2Sso और @EnableZuulProxy और @EnableOAuth2Resource के साथ कॉन्फ़िगर किया गया संसाधन सर्वर (अलग ऐप) के साथ कॉन्फ़िगर किया गया है। मैं देख सकता हूं कि क्लाइंट Authorization: Bearer {access_token here} के साथ संसाधन सर्वर को सही ढंग से प्रमाणीकृत करता है, लेकिन जब एक बार पहुंच टोकन समाप्त हो जाती है, तो प्रॉक्सी संसाधन सर्वर अनुरोध स्थायी रूप से विफल रहता है।OAuth2 क्लाइंट रीफ्रेशिंग का उपयोग क्यों नहीं किया गया है access_token?

[संपादित]

मैं एक कस्टम RemoteTokenServices सेम OpenAM के/tokeninfo endpoint एक ACCESS_TOKEN मान्य रहती है कि क्या तय करने के लिए उपयोग करता है प्रदान करके मेरी संसाधन सर्वर संशोधित कर लिया है। (स्प्रिंग-प्रदत्त रिमोट टोकन सर्विसेज बीन पोस्ट करने का प्रयास करता है, जो ओपनएएम से 405 प्राप्त करता है)। जब मुझे access_token का पता लगाना अमान्य है, तो मैंने my.spring.oauth2.OpenAMRemoteTokenServices#loadAuthentication से अमान्य TokenException फेंक दिया। अब, मेरा संसाधन सर्वर (मुझे सही लगता है) क्लाइंट के जवाब पर HTTP 401 भेज रहा है, जिस स्थिति में access_token की समयसीमा समाप्त हो गई है।

फिर भी, ग्राहक टोकन को रीफ्रेश करने का प्रयास नहीं कर रहा है।

शायद मेरा मानसिक मॉडल गलत है। मैं क्लाइंट की अपेक्षा करता हूं, समाप्त होने वाले एक्सेस_टोकन के मामले में, एक नया प्राप्त करने के लिए स्वचालित रूप से refresh_token का उपयोग करने के लिए। मुझे नहीं पता कि मुझे लगता है कि इसे एक access_token (समाप्ति समय से पहले कुछ ईपीएसलॉन के भीतर) को सक्रिय रूप से रीफ्रेश करना चाहिए, या डाउनस्ट्रीम अनुरोध विफल होने की प्रतीक्षा करें और फिर रीफ्रेश करने का प्रयास करें। लेकिन मेरा ग्राहक न तो ऐसा कर रहा है, और मैं नहीं बता सकता कि क्यों नहीं।

+0

मैं 'कि org.springframework.cloud.security.oauth2.resource.UserInfoTokenServices # getMap' देख सकते हैं (क्लाइंट में) संदर्भ पर access_token को सेटिंग (प्रतिस्थापित) सेटिंग के साथ कम जानकारीपूर्ण है। प्रतिस्थापन टोकन में केवल अपारदर्शी स्ट्रिंग टोकन मान होता है, जबकि टोकन जिसे प्रतिस्थापित किया जाता है, वह समाप्ति और रीफ्रेश टोकन होता है। अभी तक पता नहीं लगा है कि _why_ टोकन को कम-से-कम टोकन के साथ प्रतिस्थापित किया जा रहा है जिसमें * समान अपारदर्शी स्ट्रिंग * है। –

+0

हाय, यह वास्तव में मेरे जैसा मुद्दा है। मैं अल्पकालिक पहुंच टोकन देना चाहता हूं और उपयोगकर्ताओं के सत्र की अवधि के लिए ज़ूउल प्रॉक्सी रीफ्रेश टोकन का उपयोग करना चाहता हूं। क्या आपने कभी प्रगति की है? –

+0

@WillFaithfull क्षमा करें, नहीं, मैंने कभी यह नहीं सोचा, और शायद अब तक सवाल हटा दिया जाना चाहिए। आपको कोई मदद करने के लिए खेद है। –

उत्तर

2

के रूप में इस Git अंक में कहा गया है: https://github.com/spring-guides/tut-spring-security-and-angular-js/issues/140, समस्या तथ्य यह है कि संस्करण 1.4 के साथ और Zuul फिल्टर है कि सेवाओं तक पहुँच टोकन के नीचे की ओर संभालती (org.springframework.cloud.security.oauth2.proxy.OAuth2TokenRelayFilter) बूट वसंत के ऊपर का एक सेम याद आ रही है से संबंधित हो सकती OAuth2RestTemplate टाइप करें, जिसे फ़िल्टर द्वारा स्वचालित रूप से रीफ्रेश_टोकन अनुदान को स्वचालित रूप से संभालने के लिए उपयोग किया जाता है जब टोकन की अवधि समाप्त हो जाती है।

मैं एक ही मुद्दा था और मैं एक विन्यास कक्षा में निम्नलिखित सेम जोड़कर इसे हल:

@Configuration 
public class ZuulConfiguration { 
    @Bean 
    protected OAuth2RestTemplate oauth2RestTemplate(OAuth2ProtectedResourceDetails resource, 
     OAuth2ClientContext context) { 

     return new OAuth2RestTemplate(resource, context); 
    } 
} 
संबंधित मुद्दे