繁体   English   中英

角度中的CSRF令牌与Laravel 5不同

[英]CSRF token in angular is different of Laravel 5

我有一个项目在后端和前端分开,后端(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的请求是否来自安全来源?

在基于令牌的身份验证中,将不使用cookie和会话。 令牌将用于为每个对服务器的请求验证用户。 它将使用以下控制流程:

  1. 用户在登录表单中提供用户名和密码,然后单击“登录”。
  2. 发出请求后,通过查询数据库来验证后端的用户。 如果请求有效,请使用从数据库获取的用户信息创建令牌,然后在响应头中返回该信息,以便我们可以将令牌浏览器存储在本地存储中。
  3. 在每个请求标头中提供令牌信息,以访问应用程序中受限制的端点。

4.request头信息有效,让用户访问指定的端点,并使用JSON或XML进行响应。

这可以通过Jwt(Json web Token)实现。来自链接的此信息。

那么,这个JWT是什么?

智威汤逊

JWT代表JSON Web Token,是授权头中使用的令牌格式。 此令牌可帮助您以安全的方式设计两个系统之间的通信。 为了本教程的目的,让我们将JWT重新定义为“持票人令牌”。 承载令牌由三部分组成:标头,有效负载和签名。

  • 标头是令牌的一部分,用于保存令牌类型和加密方法,该方法也使用base-64加密
  • 有效载荷包括信息。 您可以放置​​任何类型的数据,如用户信息,产品信息等,所有这些数据都以base-64加密方式存储。
  • 签名由标头,有效负载和密钥的组合组成。 密钥必须安全地保存在服务器端。

可以在此处找到带有AngularJS和NodeJS的基于令牌的身份验证的示例教程。

希望这能解决你的问题,一切顺利!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM