2016-06-24 12 views
24

में नहीं मिला था मैं जावा configप्रदान की CSRF टोकन को सत्यापित नहीं किया जा सका क्योंकि आपके सत्र वसंत सुरक्षा

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http 
    .authorizeRequests() 
    .antMatchers("/api/*").hasRole("ADMIN") 
    .and() 
    .addFilterAfter(new CsrfTokenResponseHeaderBindingFilter(), CsrfFilter.class) 
    .exceptionHandling() 
    .authenticationEntryPoint(restAuthenticationEntryPoint) 
    .and() 
    .formLogin() 
    .successHandler(authenticationSuccessHandler) 
    .failureHandler(new SimpleUrlAuthenticationFailureHandler()); 

मैं अपने बाकी सेवाओं का परीक्षण के लिए PostMan उपयोग कर रहा हूँ के साथ वसंत सुरक्षा का उपयोग कर रहा हूँ। मुझे सफलतापूर्वक 'csrf टोकन' मिलता है और मैं अनुरोध शीर्षलेख में X-CSRF-TOKEN का उपयोग करके लॉगिन करने में सक्षम हूं। लेकिन लॉगिन के बाद जब मैंने पोस्ट अनुरोध मारा (मैं अनुरोध हेडर में एक ही टोकन समेत हूं जिसे मैंने लॉगिन पोस्ट अनुरोध के लिए उपयोग किया था) मुझे निम्न त्रुटि संदेश मिलता है:

HTTP स्थिति 403 - प्रदत्त सीएसआरएफ टोकन सत्यापित नहीं कर सका क्योंकि आपका सत्र नहीं मिला था।

कोई भी मुझे मार्गदर्शन कर सकता है कि मैं क्या गलत कर रहा हूं।

+0

हो सकता है आप जाँच कर सकते हैं http://stackoverflow.com/questions/38886190/ प्रदान नहीं किया जा सकता-प्रदान-सीएसआरएफ-टोकन-क्योंकि-आपका-सत्र-नहीं मिला/38888894 # 38888894 – FreezY

उत्तर

-2

मैंने इसे अपने लॉगिन पेज में अंतिम विशेषता जोड़कर हल किया है, हो सकता है कि यह आपके पक्ष में होगा।

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" isELIgnored="false"%> 
+0

यह वह समाधान नहीं है जिसे मैं ढूंढ रहा हूं, क्योंकि जैसा कि मैंने इस प्रश्न में उल्लेख किया है कि मैं मैं बाकी सेवाओं को लागू कर रहा हूं और मैं आराम से अनुरोध भेज रहा हूं क्लाइंट जे से नहीं एसपी या वेब ब्राउज़र। –

55

spring.io के अनुसार:

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

तो उसे निष्क्रिय करने:

@Configuration 
public class RestSecurityConfig extends WebSecurityConfigurerAdapter { 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    http.csrf().disable(); 
    } 
} 

नोट: CSRF संरक्षण जावा विन्यास के साथ डिफ़ॉल्ट रूप से सक्षम

+5

जावा कॉन्फ़िगरेशन के साथ डिफ़ॉल्ट रूप से सीएसआरएफ सुरक्षा सक्षम है। –

+0

सीएसआरएफ को अक्षम करने की अनुशंसा नहीं की जाती है। क्या होगा यदि मैं पोस्टमैन का उपयोग करके अपने एपीआई का परीक्षण करना चाहता था, लेकिन एपीआई के रूप में सक्षम सीएसआरएफ को ब्राउजर द्वारा इस्तेमाल किया जाना चाहिए था? सीएसआरएफ को अक्षम करना गलत दृष्टिकोण है – robjwilkins

+0

@robjwilkins मुझे आशा है कि आपको अपना उत्तर यहां मिलेगा - https://stackoverflow.com/questions/30498328/selective-usage-of-spring-securitys-csrf-filter?noredirect=1&lq=1 या यहां https://stackoverflow.com/questions/26179940/spring-security-enable-disable-csrf-by-client-type-browser-non-browser –

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