2013-01-25 16 views
6

मैं आधिकारिक ट्यूटोरियल Sparklr2/Tonr2 पर आधारित अपने स्वयं के उदाहरण को लागू करने का प्रयास करता हूं। सब कुछ अच्छा लग रहा है, लेकिन जब मैं अपने Tonr2 कार्यान्वयन, वसंत सुरक्षा फिल्टर में web.xml से हटा दें मैं अपवाद है:वसंत सुरक्षा oauth 2 सरल उदाहरण

नहीं अनुप्रेषित यूआरआई वर्तमान अनुरोध

मैं नहीं समझ सकता के लिए स्थापित किया गया है मुझे किस यूआरएल का उपयोग करना चाहिए।

<!--apply the oauth client context --> 
<oauth:client id="oauth2ClientFilter" /> 

<!--define an oauth 2 resource for sparklr --> 
<oauth:resource id="provider" type="authorization_code" client-id="client" client-secret="secret" 
    access-token-uri="http://localhost:8080/provider/oauth/token" user-authorization-uri="http://localhost:8080/provider/oauth/authorize" scope="read,write" /> 

<beans:bean id="clientController" class="com.aouth.client.ClientController"> 
    <beans:property name="trustedClientRestTemplate"> 
     <oauth:rest-template resource="provider" /> 
    </beans:property> 
</beans:bean> 

और प्रदाता के लिए:

<http pattern="/oauth/token" create-session="stateless" authentication-manager-ref="clientAuthenticationManager" xmlns="http://www.springframework.org/schema/security"> 
    <intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_FULLY" /> 
    <anonymous enabled="false" /> 
    <http-basic /> 
</http> 

<authentication-manager id="clientAuthenticationManager" xmlns="http://www.springframework.org/schema/security"> 
    <authentication-provider user-service-ref="clientDetailsUserService" /> 
</authentication-manager> 

<bean id="clientDetailsUserService" class="org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService"> 
    <constructor-arg ref="clientDetails" /> 
</bean> 

<!-- The OAuth2 protected resources are separated out into their own block so we can deal with authorization and error handling 
    separately. This isn't mandatory, but it makes it easier to control the behaviour. --> 
<http pattern="/secured" create-session="never" access-decision-manager-ref="accessDecisionManager" xmlns="http://www.springframework.org/schema/security"> 
    <anonymous enabled="false" /> 
    <intercept-url pattern="/secured" access="ROLE_USER,SCOPE_READ" /> 
    <custom-filter ref="resourceServerFilter" before="PRE_AUTH_FILTER" /> 
    <http-basic /> 
</http> 

<bean id="accessDecisionManager" class="org.springframework.security.access.vote.UnanimousBased" xmlns="http://www.springframework.org/schema/beans"> 
    <constructor-arg> 
     <list> 
      <bean class="org.springframework.security.oauth2.provider.vote.ScopeVoter" /> 
      <bean class="org.springframework.security.access.vote.RoleVoter" /> 
      <bean class="org.springframework.security.access.vote.AuthenticatedVoter" /> 
     </list> 
    </constructor-arg> 
</bean> 

<oauth:resource-server id="resourceServerFilter" resource-id="resource" token-services-ref="tokenServices" /> 

<bean id="tokenServices" class="org.springframework.security.oauth2.provider.token.DefaultTokenServices"> 
    <property name="tokenStore" ref="tokenStore" /> 
    <property name="supportRefreshToken" value="true" /> 
    <property name="clientDetailsService" ref="clientDetails"/> 
</bean> 

<bean id="tokenStore" class="org.springframework.security.oauth2.provider.token.InMemoryTokenStore" /> 

<http auto-config="true" xmlns="http://www.springframework.org/schema/security"> 
    <intercept-url pattern="/test" access="ROLE_USER" /> 
    <intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
</http> 

<authentication-manager alias="authenticationManager" xmlns="http://www.springframework.org/schema/security"> 
    <authentication-provider> 
     <user-service> 
      <user name="pr" password="pr" authorities="ROLE_USER" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

<oauth:authorization-server client-details-service-ref="clientDetails" token-services-ref="tokenServices" > 
    <oauth:authorization-code /> 
    <oauth:implicit /> 
    <oauth:refresh-token /> 
    <oauth:client-credentials /> 
    <oauth:password /> 
</oauth:authorization-server> 

<oauth:client-details-service id="clientDetails"> 
    <oauth:client client-id="client" resource-ids="resource" authorized-grant-types="authorization_code, implicit" 
     authorities="ROLE_CLIENT" scope="read,write" secret="secret" /> 
</oauth:client-details-service> 

मैं सिर्फ मेरे मुवक्किल वसंत सुरक्षा के बिना काम करना चाहते हैं यहाँ मेरी कोड, ग्राहक कार्यान्वयन के लिए है। और जब मुझे अपने संरक्षित संसाधन की आवश्यकता होती है तो मैं केवल प्रदाता पक्ष पर लॉगिन करना चाहता हूं।

+0

क्या आप इसे पूरा करने में सक्षम थे? क्या आपके पास यह दिखाने के लिए कोड है कि आपने क्या किया? मैं एक ही चीज़ सीखने की कोशिश कर रहा हूं – daydreamer

उत्तर

10

आप 2 एक्सएमएल कि तुम यहाँ चिपकाया OAuth प्रदाता के लिए वसंत के XML और संरक्षित संसाधन, जो आपके मामले में एक ही webapp में चलाया जाता है। (यदि आप चाहें तो आप उन्हें अलग कर सकते हैं)।

ग्राहक (पहला पेस्ट-एक्सएमएल) एक अलग कहानी है। अगर मैं आपको सही ढंग से समझता हूं, तो आप चाहते हैं कि आपका क्लाइंट स्प्रिंग की मदद के बिना दौड़ें (एक नियमित वेबपैप बनें, और वसंत-सुरक्षा-ओथ-क्लाइंट वेबएप नहीं)।

आपको समझना होगा कि ओथ कैसे काम करता है: क्लाइंट संरक्षित संसाधन तक पहुंचने का प्रयास करता है; अगर इसमें एक्सेस-टोकन नहीं है, तो इसे ओथ-प्रदाता पर रीडायरेक्ट किया जा रहा है (जो लॉगिन पेज दिखाता है और टोकन की आपूर्ति करता है)। By the standard, एक्सेस-टोकन के अनुरोध में "रीडायरेक्ट-यूरी" पैरा होना चाहिए, इसलिए सफल लॉगिन के बाद, ओथ-प्रदाता जानता है कि क्लाइंट को रीडायरेक्ट करना है। OAuth क्लाइंट यह आपके लिए करता है, और यदि आप अपने web.xml से "oauth क्लाइंट" को हटाते हैं, तो अब आपको इसे स्वयं लागू करना होगा।

आपके उत्तर के लिए धन्यवाद। लेकिन मुझे अभी भी समझ में नहीं आता कि कैसे वसंत सुरक्षा मेरे oAuth क्लाइंट को प्रभावित करती है। और क्या मैं वसंत-सुरक्षा के बिना क्लाइंट साइड वसंत-ओथ (वसंत-एमवीसी) के लिए उपयोग कर सकता हूं?

जब आप अपने एक्सएमएल में इस लाइन लिखने:

< oauth:client id="oauth2ClientFilter" /> 

इसका मतलब है कि आप वसंत-सुरक्षा-OAuth है, जो एक पैकेज OAuth के लिए समर्पित, वसंत-सुरक्षा के साथ बनाया गया है का उपयोग करें। यदि आप खोदते हैं, तो यह उस श्रृंखला में एक विशेष फ़िल्टर (OAuth2ClientContextFilter) डालता है जो क्लाइंट के लिए प्रासंगिक ओथ सामग्री को संभालता है। उनमें से एक सभी पैराम के साथ अनुरोध भेज रहा है ("रीडायरेक्ट-यूरी" उनमें से एक है)।

यदि आप तय वसंत-सुरक्षा-OAuth का उपयोग करने के लिए नहीं, अच्छी तरह से - मदद करता है कि आप खुद ही इस तर्क को लागू करना होगा ...

आशा!

+0

आपके उत्तर के लिए धन्यवाद। लेकिन मुझे अभी भी समझ में नहीं आता कि मेरे ओथ क्लाइंट पर वसंत सुरक्षा कैसे प्रभावित होती है। और क्या मैं वसंत-सुरक्षा के बिना क्लाइंट साइड वसंत-ओथ (वसंत-एमवीसी) के लिए उपयोग कर सकता हूं? – chaldaean

+2

धन्यवाद ओहडआर, आपके उत्तर ने वास्तव में मुझे समझने में मदद की। – chaldaean

+0

@chaldaean क्या आप इसे पूर्ण करने के बाद पूर्ण सुरक्षा.एक्सएमएल फ़ाइल का प्रदर्शन कर सकते हैं – PRASANTHMV

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