हम एक माइक्रोएस सेवा स्थापित करना चाहते हैं जो एक आरईएसटी एपीआई प्रदान करता है ताकि इसे ओएथ 2 संसाधन सर्वर के रूप में कॉन्फ़िगर किया जा सके। इस सेवा को क्लाइंट क्रेडेंशियल अनुदान के साथ ओएथ 2 क्लाइंट के रूप में भी कार्य करना चाहिए। यहां कॉन्फ़िगरेशन है:स्प्रिंग क्लाउड OAuth2 क्लाइंट ऑटोकॉन्फ़िगरेशन को ओवरराइट कैसे करें?
spring.oauth2.client.id=clientCredentialsResource
spring.oauth2.client.accessTokenUri=http://localhost:9003/oauth/token
spring.oauth2.client.userAuthorizationUri=http://localhost:9003/oauth/authorize
spring.oauth2.client.grantType=client_credentials
spring.oauth2.client.clientId=<service-id>
spring.oauth2.client.clientSecret=<service-pw>
संसाधन सर्वर भाग ठीक काम करता है। ग्राहक भाग के लिए हम बहाना करना, रिबन और यूरेका उपयोग करना चाहते हैं:
@FeignClient("user")
public interface UserClient
{
@RequestMapping(method = RequestMethod.GET, value = "/user/{uid}")
Map<String, String> getUser(@PathVariable("uid") String uid);
}
सार मुद्दा https://github.com/spring-cloud/spring-cloud-security/issues/56 में मैं एक बहाना करना अनुरोध intercepter जो बहाना करना अनुरोध हेडर
में autowired OAuth2RestOperations टेम्पलेट से पहुँच टोकन सेट बनाया के आधार पर@Autowired
private OAuth2RestOperations restTemplate;
template.header(headerName, String.format("%s %s", tokenTypeName, restTemplate.getAccessToken().toString()));
लेकिन यह मुझे उपयोगकर्ता सेवा को फोन पर त्रुटि देता है:
error="access_denied", error_description="Unable to obtain a new access token for resource 'clientCredentialsResource'. The provider manager is not configured to support it.
मैं OAuth2ClientAutoConf देख सकते हैं iguration हमेशा वेब अनुप्रयोग के लिए AuthorizationCodeResourceDetails का एक उदाहरण बनाता है लेकिन आवश्यक क्लाइंट क्रेडेंशियल संसाधन संसाधन नहीं जो केवल गैर-वेब अनुप्रयोगों के लिए उपयोग किया जाता है। अंत में कोई पहुँच टोकन privider संसाधन जानकारी के लिए जिम्मेदार है और कॉल में
AccessTokenProviderChain.obtainNewAccessTokenInternal(AccessTokenProviderChain.java:146)
मैं ऑटो विन्यास ऊपर लिख करने की कोशिश की विफल रही है लेकिन असफल रहे। क्या कोई मुझे संकेत दे सकता है कि इसे कैसे करें?
त्वरित उत्तर के लिए धन्यवाद! यह मैंने कोशिश की है। स्वत: कॉन्फ़िगरेशन को छोड़कर काम नहीं करता है क्योंकि ऑटो-वायरिंग निर्भरता विफल रही है। मैंने क्लाइंट को खाली करने के लिए अभी कोशिश की है जो खाली काम करता है, लेकिन किसी कारण से मैं OAuth2RestOperations बाकी ऑटो-वायर नहीं कर सकता हूं, जिससे मैं एक्सेस टोकन प्राप्त करना चाहता हूं। कोई विचार? –
मुझे लगता है कि आपको उस प्रकार का '@ बीन' भी बनाना होगा। मैं जवाब में कोड अपडेट करूंगा। –
दरअसल आपको 'spring.oauth2.client.clientId' को बिल्कुल भी सेट करने की आवश्यकता नहीं हो सकती है (इसे खाली छोड़ने के बजाय)। अगर यह काम करता है तो हमें बताएं। –