2015-04-28 5 views
3

У меня есть проект, разбитый на бэкэнд и интерфейс, бэкэнд (API-интерфейс) построен в Laravel 5 и frontend в AngularJS. Оба проекта независимы, и они должны размещаться на разных серверах.Значок CSRF в угловом отличается от Laravel 5

В первом запросе я получить маркер CSRF из Laravel с этим кодом:

var xhReq = new XMLHttpRequest(); 
xhReq.open("GET", "http://laravel.local/api/token", false); 
xhReq.send(null); 
angular.module('mytodoApp').constant('CSRF_TOKEN',xhReq.responseText); 

Так csrf_token посылается каждый раз, когда я делаю запрос API, как это:

$scope.deleteTodo = function(index) { 
    $scope.loading = true; 
    var todo = $scope.tours[index]; 
    $http.defaults.headers.common['XSRF-TOKEN'] = CSRF_TOKEN; 
    console.log($http.defaults.headers.common['XSRF-TOKEN']); 
    $http.delete('http://laravel.local/api/deleteTodo/' + todo.id, {headers : {'XSRF-TOKEN': CSRF_TOKEN}}) 
     .success(function() { 
      $scope.todos.splice(index, 1); 
      $scope.loading = false; 

     }); 

в API всегда возвращаются:

TokenMismatchException in compiled.php line 2440: 

Является ли это правильно, что Laravel изменяет CSRF токен с каждым повторно квест от Углового? По каждому запросу Laravel создает новый файл для хранения/рамки/сеансов. Вы рекомендуете какое-либо другое решение для проверки того, что запросы к API поступают из безопасного происхождения?

+0

угловой имеет встроенную обработку тонов для '$ http'..read the docs – charlietfl

ответ

2

В аутентификации на основе токенов, куки-файлы и сеансы не будут использоваться. Токен будет использоваться для аутентификации пользователя для каждого запроса на сервер. Он будет использовать следующий поток управления:

  1. Пользователь предоставляет имя пользователя и пароль в форму входа и щелкает Войти.
  2. После того как запрос сделан, проверьте пользователя на сервере, запросив запрос в базе данных. Если запрос действителен, создайте токен, используя информацию пользователя, полученную из базы данных, и затем верните эту информацию в заголовок ответа, чтобы мы могли хранить браузер маркера в локальном хранилище.
  3. Предоставление информации о токенах в каждом заголовке запроса для доступа к ограниченным конечным точкам в приложениях.

информация о заголовке 4.request действительна, позволяет пользователю получить доступ к указанной конечной точке и ответить JSON или XML.

Это может быть достигнуто Jwt (Json web Token). Введите эту информацию из This.

Итак, что это за JWT?

JWT

JWT означает JSON веб-токена и токен формат, используемый в заголовках авторизации. Этот токен помогает безопасно конструировать связь между двумя системами. Давайте перефразируем JWT как «токен-носитель» для целей этого урока. Маркер-носитель состоит из трех частей: заголовок, полезная нагрузка и подпись.

  • Заголовок является частью маркера, который удерживает маркер типа и метод шифрования, который также зашифрованное с основанием 64-
  • Полезная нагрузка включает в себя информацию. Вы можете поместить любые данные, такие как информация о пользователе, информация о продукте и т. Д., Все из которых хранится с использованием шифрования base-64.
  • Подпись состоит из комбинаций заголовка, полезной нагрузки и секретного ключа. Секретный ключ должен быть надежно сохранен на стороне сервера.

Учебное пособие с примером может быть найдено здесь Token-Based Authentication With AngularJS & NodeJS.

Надеюсь, что это решит вашу проблему, все самое лучшее !!

+0

Хорошее объяснение ... Kay mhanshil ... !!! –

Смежные вопросы