2013-08-06 4 views
15

मैं REST एंडपॉइंट्स बनाने के लिए JBoss AS और JAX-RS का उपयोग कर रहा हूं।जेएक्स-आरएस: आरईएसटी एंडपॉइंट्स कैसे सुरक्षित करें?

चलें कहना मेरी कक्षा लग रहा है

@Path("/users") 
public class UserResource { 


    @GET 
    public Response getAccount() { 
    return "hello"; 
    } 
} 

अब getAccount पल

चाहता था पर प्रमाणीकृत नहीं है की तरह
- मैं प्रमाणीकरण जोड़ने के लिए इतनी है कि जब कोड हिट getAccount उपयोगकर्ता है चाहते हैं प्रमाणीकृत
- मैं प्रमाणीकरण को XML कॉन्फ़िगरेशन के बजाय एनोटेशन द्वारा संचालित करना चाहता हूं, यदि संभव हो तो
- मैं डेटाबेस तुलना करने के लिए देखने के लिए चाहते हैं, तो उपयोगकर्ता मान्य है

समस्या
- मैं कभी नहीं किया है कि तो मैं पता नहीं कैसे लागू करने के लिए यह
है - क्या मैं एक बहुत आसपास googled है और पाया जर्सी उदाहरण

अद्यतन
- मैं प्रत्येक अनुरोध और नहीं किसी भी सत्र

बनाने के साथ प्रमाणीकरण क्रेडेंशियल्स भेजना चाहते हैं 210

कृपया मुझे एक साधारण कामकाजी उदाहरण के साथ मार्गदर्शन करें और मैं वहां से विस्तार करने की कोशिश करूंगा

+0

आप की आवश्यकता के लिए जा रहे हैं प्रत्येक अनुरोध के साथ प्रमाणीकरण प्रमाण पत्र पारित हो जाते हैं, या आप एक सत्र के निर्माण की अनुमति देने जा रहे हैं? – thatidiotguy

+0

मैं बस अपना सवाल अद्यतन, मैं प्रत्येक अनुरोध के साथ क्रेडेंशियल्स भेजने के लिए और किसी भी सत्र – daydreamer

+0

मैं http://stackoverflow.com/questions/18345600/how- पर समाधान कृपया मेरे जवाब देखने को लागू किया है पैदा नहीं करना चाहते हैं टू-इंटरसेप्ट-रेस्ट-एंडपॉइंट-टू-प्राप्त-ऑल-हेडर? answertab = सबसे पुराना # टैब-टॉप – daydreamer

उत्तर

10

मैंने इसे निम्नलिखित कोड के साथ हल किया।

टिप्पणी टोकन तंत्र को अपडेट किया जाएगा एक बार मुझे लगता है कि

मैं इंटरसेप्टर मैं संशोधित करके इस का समाधान कर लिया करते हैं, निम्नलिखित कोड

एनोटेशन

@Inherited 
@InterceptorBinding 
@Target({ ElementType.TYPE, ElementType.METHOD }) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface SecurityChecked { 

} 

है संसाधन वर्ग

public class SecureResource { 

    @GET 
    @SecurityChecked 
    public Response getUser() { 
     return Response.ok("authenticated successfully!").build(); 
    } 
} 

इंटरसेप्टर वर्ग

@Interceptor 
@Provider 
@ServerInterceptor 
@SecurityChecked 
public class SecurityCheckInterceptor implements PreProcessInterceptor, AcceptedByMethod { 
    private static final Logger LOGGER = LoggerFactory.getLogger(SecurityCheckInterceptor.class); 

    @Nullable 
    @Override 
    public ServerResponse preProcess(final HttpRequest request, final ResourceMethod method) throws Failure, WebApplicationException { 
     final List<String> authToken = request.getHttpHeaders().getRequestHeader("X-AUTH"); 

     if (authToken == null || !isValidToken(authToken.get(0))) { 
      final ServerResponse serverResponse = new ServerResponse(); 
      serverResponse.setStatus(Response.Status.UNAUTHORIZED.getStatusCode()); 
      return serverResponse; 
     } 

     return null; 
    } 

    private static boolean isValidToken(@Nonnull final String authToken) { 
     LOGGER.info("validating token: " + authToken); 
     return true; 
    } 

    @SuppressWarnings("rawtypes") 
    @Override 
    public boolean accept(final Class declaring, final Method method) { 
     // return declaring.isAnnotationPresent(SecurityChecked.class); // if annotation on class 
     return method.isAnnotationPresent(SecurityChecked.class); 
    } 
} 

और फिर मैं JBoss में संसाधन वर्ग की तैनाती और कमांड लाइन पर आदेशों जारी करने का पालन करते हुए मेरी एकता परीक्षण चलाने

curl --header 'X-AUTH: 1a629d035831feadOOO4uFReLyEW8aTmrCS' http://localhost:8080/market-1.0-SNAPSHOT/rest/login 
curl --header 'InvalidHeader: InvalidHeaderValue' http://localhost:8080/market-1.0-SNAPSHOT/rest/login 
16

आपको अपने जेएक्स आरएस एंड पॉइंट्स के सामने एक स्टेटलेस स्प्रिंग सुरक्षा कॉन्फ़िगरेशन की आवश्यकता है। मैंने उस समस्या को हल किया है जिसे आप हल करने का प्रयास कर रहे हैं लेकिन मेरे पास साझा करने के लिए मेरा अपना कोड नहीं है ..

यहां एक प्रोजेक्ट है जिसने आपसे पूछे गए सटीक काम को किया है, कुछ बुद्धिमान व्यक्ति ने यह सब किया है आप;)

https://github.com/philipsorst/angular-rest-springsecurity

जादू क्या है?

  1. आप एक असुरक्षित यूआरएल जो प्रमाणीकरण करता है, और साथ ही उपयोगकर्ता भूमिकाओं सेट ..
  2. तो फिर तुम, टोकन के कुछ प्रकार वापसी में यह कैश जो बाद के हर कॉल पर उम्मीद की जाएगी में कुछ जहां डाल ..
  3. अन्य संरक्षित संसाधनों पर नया अनुरोध पर, आपको जांच करेगा कि टोकन अपने कैश/सत्र की दुकान में मौजूद है, (आप कुछ व्यवस्था की जरूरत मान्य टोकन का ट्रैक रखने के)
  4. तो टोकन पुन: भेज और वैध है आप स्प्रिंग सिक्योरिटी में प्रोग्रामेटिक लॉग-इन करें जो सुनिश्चित करता है कि आप वसंत प्रदान करने वाली सभी सुरक्षा सुविधाओं का उपयोग कर सकते हैं, (एनोटेशन, जेएसटीएल टैग इत्यादि।)!
  5. एक बार टोकन सत्यापन आप अपने नियंत्रकों (उर्फ JAX रुपये संसाधनों) में उपयोगकर्ता जानकारी में लॉग इन किया जाएगा आगे सुरक्षा से निपटने के लिए ..
  6. पारित कर दिया तो टोकन वैध या मौजूद नहीं नहीं था, यह विफलता में फंस किया जाएगा अंत बिंदु जो उपयुक्त प्रतिक्रिया (401)

समझने के लिए निम्नलिखित लिंक देखें कि कैसे स्टेटलेस स्प्रिंग सुरक्षा कॉन्फ़िगर किया गया है .., https://github.com/philipsorst/angular-rest-springsecurity/blob/master/src/main/resources/context.xml

.. देखें कैसे एक उपयोगकर्ता पहली बार के लिए मान्य है और एक टोकन उत्पन्न होता है https://github.com/philipsorst/angular-rest-springsecurity/blob/master/src/main/java/net/dontdrinkandroot/example/angularrestspringsecurity/rest/resources/UserResource.java

यहाँ वर्ग जहां कार्यक्रम संबंधी लॉगिन टोकन जांच के बाद हर अनुरोध पर किया जाता है है .. https://github.com/philipsorst/angular-rest-springsecurity/blob/master/src/main/java/net/dontdrinkandroot/example/angularrestspringsecurity/rest/AuthenticationTokenProcessingFilter.java

+0

वास्तव में मेरी मदद की – daydreamer

+0

इससे मुझे भी मदद मिली। जैसा कि मुझे कुछ अलग-अलग तरीकों से जांच करने की ज़रूरत थी, मैं "सिर्फ एक और डेमो" के साथ समाप्त हुआ। जबकि मूल बातें बहुत समान हैं (यहां शुरू की गई प्रेरणा से इंकार नहीं कर सकते हैं), मैंने यूआई और जेपीए/डीबी गिरा दिया और स्प्रिंग सिक्योरिटी पर अधिक ध्यान केंद्रित किया। परिणाम [यहां] है (https://github.com/virgo47/restful-spring-security), यह टिप्पणी की गई है, ग्रैडल-आधारित, कर्ल पर आधारित test.sh शामिल है। और मैंने इस विषय के साथ-साथ अनुक्रम आरेखों के साथ-साथ एक [ब्लॉग पोस्ट] लिखा है (http://virgo47.wordpress.com/2014/07/27/restful-spring-security-with-authentication-token/)। सहायक होना चाहिए। – virgo47

+1

हे राकेश, मैंने जिथब पर कोणीय-आराम-वसंत सुरक्षा परियोजना की जांच की है, मेरे पास एक सवाल है, हालांकि सभी सुरक्षा संबंधी मुद्दों को तस्वीर में प्राधिकरण के साथ ख्याल रखा जाता है, लेकिन जब उपयोगकर्ता को 'प्रमाणित' होने पर ब्राउज़र को रीफ्रेश किया जाता है नियंत्रण लॉग इन पेज पर रीडायरेक्ट किया जाता है, भले ही मैं अभी लॉगिन करता हूं और रीफ्रेश पर क्लिक करता हूं .... क्या आपको इसके बारे में कोई जानकारी है ..? – Amit

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