我有一个项目在后端和前端分开,后端(API rest)是在Laravel 5和AngularJS的前端构建的。这两个项目都是独立的,它们应该托管在不同的服务器上。
在第一个请求中,我使用以下代码从Laravel获取CSRF令牌:
var xhReq = new XMLHttpRequest();
xhReq.open("GET", "http://laravel.local/api/token", false);
xhReq.send(null);
angular.module('mytodoApp').constant('CSRF_TOKEN',xhReq.responseText);
因此每次向API发出请求时都会发送CSRF_TOKEN,如下所示:
$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是否通过Angular的每个请求更改CSRF令牌?在每个请求中,Laravel都会在存储/框架/会话上创建一个新文件。您是否建议使用任何其他解决方案来验证对API的请求是否来自安全来源?
答案 0 :(得分:2)
在基于令牌的身份验证中,不会使用Cookie和会话。令牌将用于为每个对服务器的请求验证用户。 它将使用以下控制流程:
4.request标头信息有效,让用户访问指定的端点,并使用JSON或XML进行响应。
这可以通过Jwt(Json网络令牌)实现。来自This链接的此信息。
那么,这是什么JWT?
JWT
JWT代表JSON Web Token,是授权标头中使用的令牌格式。此令牌可帮助您以安全的方式设计两个系统之间的通信。让我们将JWT重新定义为"持票人令牌"出于本教程的目的。承载令牌由三部分组成:标题,有效负载和签名。
可以在此处找到带有示例的教程Token-Based Authentication With AngularJS & NodeJS。
希望这能解决你的问题,All all Best !!