मैं यूआरएल के दो सेट के लिए अलग विन्यास - एक सेट बाकी एपीआई, दूसरा एक है - बहुत साधारण वेबसाइट है। मैं इतना है कि उपयोगकर्ता/लिपि कि कभी कभी REST API लागू या तो 401 कोड (मूल प्रमाणीकरण ठीक होगा) के साथ जवाब दिया जाएगा बाकी एपीआई के लिए विभिन्न सुरक्षा नियम लागू करना चाहते हैं - या सिर्फ 403स्प्रिंग सुरक्षा - REST API और अन्य URL
तो मैं अनुमति देना चाहते हैं
- उपयोगकर्ता कि (साइट पेज कि REST API का आह्वान इस प्रकार एक ही सत्र के शेयरों पर जावास्क्रिप्ट के लिए) में लॉग इन कर दिया गया है के लिए बाकी API तक पहुंच।
- कुछ स्क्रिप्ट जो डब्ल्यूडब्ल्यूडब्लू-प्रमाणीकरण हेडर में बुनियादी लेख प्रमाण-पत्रों के साथ आरईएसटी एपीआई को आमंत्रित करती है।
फिलहाल मैं यह पता लगाने की कोशिश कर रहा हूं कि कौन सी कॉन्फ़िगरेशन वसंत को "समझने" के बारे में बताएगा। मैं निम्नलिखित config के साथ आया था:
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
<http pattern="/" security="none" />
<http pattern="/static/**" security="none" />
<!-- REST API -->
<http pattern="/rest/*" use-expressions="true">
<http-basic />
<intercept-url pattern="/*" access="isAuthenticated()" />
</http>
<!-- Site -->
<http access-denied-page="/WEB-INF/views/errors/403.jsp" use-expressions="true">
<intercept-url pattern="/index.html" access="hasRole('ROLE_USER') or hasRole('ROLE_ANONYMOUS')" />
<intercept-url pattern="/login.html" access="hasRole('ROLE_USER') or hasRole('ROLE_ANONYMOUS')" />
<intercept-url pattern="/admin/*" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<form-login login-page="/login.html"
default-target-url="/index.html"
authentication-failure-url="/login.html?error=1" />
<logout logout-url="/logout.do" logout-success-url="/index.html" />
<anonymous username="guest" granted-authority="ROLE_ANONYMOUS" />
<remember-me />
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="admin" password="2" authorities="ROLE_ADMIN,ROLE_USER" />
<user name="alex" password="1" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
दुर्भाग्य से न केवल बुनियादी प्रमाणीकरण इस config साथ काम नहीं करता लेकिन वहाँ है अनाम उपयोगकर्ता द्वारा किए गए अनुरोध के लिए कोई 403 प्रतिक्रियाएं - रीडायरेक्ट 302 मिली के साथ आवेदन के जवाब जो मैं था आरईएसटी एपीआई यूआरएल के लिए अस्वीकार करना पसंद है।
मैं REST API के लिए कस्टम प्रवेश बिंदु जोड़ने की कोशिश की:
<beans:bean id="ep403" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/>
<!-- REST API -->
<http pattern="/rest/*" entry-point-ref="ep403" use-expressions="true">
<intercept-url pattern="/*" access="hasRole('ROLE_USER')" />
<http-basic />
</http>
लेकिन यह या तो काम नहीं करता।
सारांश में मैं क्या प्राप्त करना चाहते है:
- (प्राधिकरण सुविधा एक खाते में कुकीज़ में उपयोगकर्ता सत्र लेना चाहिए) अधिकृत उपयोगकर्ता REST API एक्सेस करने दें।
- स्क्रिप्ट को रीस्ट एपीआई तक पहुंचने की अनुमति दें यदि यह सही प्रमाणीकरण टोकन निर्दिष्ट करता है और कुकीज़ में सत्र निर्दिष्ट नहीं करता है।
अद्यतन
स्प्रिंग सुरक्षा internals की खुदाई के बाद मैं कोड कुछ अनुरोध या नहीं अस्वीकार करने के लिए है कि क्या फैसला करता है कि पाया। यह एक तथाकथित "एक्सेस निर्णय मतदाता" है, मूल रूप से उनमें से सभी कुछ अनुरोध पर लागू होते हैं और यदि किसी संसाधन के वोट में एक निर्णय निर्णय मतदाता कुछ संसाधनों तक पहुंच से इनकार करने के लिए अनुरोध को अंततः अस्वीकार कर दिया जाता है।
इसलिए मूल समस्या विशेष पहुँच निर्णय मतदाता कि निम्नलिखित तरीके से बर्ताव करता है शुरू करने से हल किया जा सकता है: यह (यदि अनुरोध में किसी भी वर्तमान) और इस भूमिका के साथ प्राधिकरण चरण पर आय सत्र से जुड़े भूमिका को निकालने के लिए कोशिश करता है; यदि कोई सत्र मौजूद नहीं है तो यह उपयोगकर्ता को WWW- प्रमाणीकरण शीर्षलेख में प्रमाण-पत्रों के विरुद्ध प्रमाणीकृत करने का प्रयास करता है और फिर दिए गए उपयोगकर्ता से जुड़ी भूमिकाओं के साथ प्राधिकरण चरण तक पहुंच जाता है।
धन्यवाद, सत्र-सत्र चाल करता है, लेकिन हालांकि यह मूल लेख काम करता है, सत्र द्वारा प्रमाणीकरण कार्य करने से इंकार कर देता है (दूसरे शब्दों में पृष्ठ पर जावास्क्रिप्ट आरईएसटी एपीआई तक पहुंचने में सक्षम नहीं होगा)। – Alex
हां यह सच है। बदलते पैटर्न सहायक थे? –
पैटर्न का अब कोई प्रभाव नहीं है क्योंकि अब मेरे पास एक बहुत ही सरल आरईएसटी एपीआई यूआरएल योजना है (जैसे/बाकी/पुस्तक? नाम = एक्स - फिलहाल मैं ऑथ बोझ से फंस गया हूं और मैं इसे विस्तारित करने के बारे में नहीं सोचता) । निस्संदेह मेरा पैटर्न गहरे घोंसले के साथ यूआरएल के लिए काम नहीं करेगा जैसे/आराम/एक/दो, इसे इंगित करने के लिए धन्यवाद। create-session = "stateless" दोनों पैटर्न के लिए मूल लेख काम करता है लेकिन यह वसंत दोनों पैटर्न के लिए मौजूदा अधिकृत सत्र को अनदेखा करता है। – Alex