2015-05-03 9 views
1

Я создаю веб-приложение с использованием весенней безопасности и тимелеафа, я получил его работу с логином и выходом из системы, но у меня есть некоторые проблемы, когда я пытаюсь зарегистрироваться как конечный пользователь. Я получаю недопустимую ошибку токена csrf. Я новичок в этом, и я мог бы помочь. Мой вопрос в том, как я могу прикрепить токен к этому запросу? (Post/registration) Кстати, я не использовал какой-либо XML, я использую аннотации.403 Forbidden Invalid CSRF

Это запрос

$scope.registerUser = function() { 
     $http.post(BASE_URL + "/registration", $scope.registrationRequest). 
      success(function (data, status, headers, config) { 
      $log.info("Success: " + headers('Location')); 
      $scope.hasRegistered = true; 
      }).error(function(data, status, headers, config) { 
      $scope.hasRegisterErrors = true; 
      $log.info("Error: status =" + status + ", body =" + JSON.stringify(data)); 
      }); 
    } 

И ошибка

Error: status =403, body ={"timestamp":1430645356572,"status":403,"error":"Forbidden","message":"Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.","path":"/registration"} 
+0

Вы пытаетесь подключиться с помощью браузера или какой-то автоматизированной клиента ? Если автоматизированный клиент, это поможет, если вы поделились некоторыми из вашего кода запроса клиента. – merlin2011

+0

Использование браузера. – SavvasM

ответ

0

Ответное сообщение говорит вам, что сервер ожидает ваш запрос POST включить либо параметр «_csfr» или «Х -CSRF-TOKEN ". Предположительно, на вашем сервере включена защита CSFR. Это поведение по умолчанию с Spring Security, хотя вы можете его отключить. (Я бы не стал рекомендовать это делать.)

В этой статье объясняется, как гласит документация Spring Security. This section объясняет, как реализовать токены CSRF, включая примеры того, как внедрить маркер в HTML <form> или включить его в запрос AJAX.

+0

Спасибо за комментарий Стивен, но ссылки, которые вы указали, пустые. Если бы вы могли проверить и обновить, это было бы потрясающе. – SavvasM

+0

Я искал ссылки. Пожалуйста, попробуйте еще раз. –

+0

Большое спасибо за помощь. – SavvasM

0

вы должны добавить параметр csrf в качестве параметра в свой запрос. например, использовать следующий код, чтобы определить вход в форму, чтобы получить CSRF токен и добавить в качестве параметра запроса для отправки запроса пост по форме:

<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/> 

или использовать следующий код для отправки в Ajax вызова:

<meta name="_csrf" content="${_csrf.token}"/> 
<meta name="_csrf_header" content="${_csrf.headerName}"/> 

Затем построить заголовок:

var token = $("meta[name='_csrf']").attr("content"); 
var header = $("meta[name='_csrf_header']").attr("content"); 

$(document).ajaxSend(function(e, xhr, options) { 
    xhr.setRequestHeader(header, token); 
}); 

так, что вам нужно получить СРФК маркер для передачи в качестве параметра в запросе. родниковой безопасности можно определить CSRF имя параметра по следующей конфигурации:

<http> 
    <!-- ... --> 
    <csrf token-repository-ref="tokenRepository"/> 
</http> 
<bean id="tokenRepository" 
    class="org.springframework.security.web.csrf.CookieCsrfTokenRepository" 
    p:cookieHttpOnly="false"> 
    <property name="sessionAttributeName" value="_csrf"/> 
    <property name="headerName" value="_csrf_header"/> 
</bean> 

подробнее см следующие ссылки: https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html https://spring.io/blog/2013/08/21/spring-security-3-2-0-rc1-highlights-csrf-protection/ http://www.baeldung.com/spring-security-csrf