CSRF Token 为每个 GET 方法生成不同的一个(Laravel 5.3 服务器和 Ionic 2 客户端)



我正在使用Ionic 2制作一个应用程序来登录Laravel 5.3服务器。当我从邮递员那里获得CSRF令牌时,我看到CSRF令牌永远不会改变,即使我得到多少次(除非会话结束(。因此,当我使用用户名和密码发布令牌时,我可以从邮递员登录。但是从我的 Ionic 2 应用程序中,每次我获得CSRF 代币时,CSRF 代币都会更改为另一个。因此,CSRF 验证总是返回错误。

您可以看到CSRF令牌已更改

我的GETLaravel服务器返回了CSRF令牌:

Route::get('api/csrf', function() {
return Session::token();
});

我从Ionic应用程序客户端执行的GET方法:

token() {
this._token = this.http.get('http://localhost:8000/api/csrf').map((res:Response) => res.text()).subscribe(data => {
consoler.log(data);
});
}

我知道问题是我没有以正确的方式保存令牌或使用会话cookie进行某些操作。如果你们有什么想法,请帮助我!感谢您阅读所有问题!

p/s: 1.我的英语不好,如果我有什么错误,请原谅我。 2. 我正在使用 Ionic 开发 Cordova 应用程序(我认为是 Ionic 选项卡应用程序(和带有 Laravel 的 API 服务器

如果你正在开发一个通过Authorization头进行身份验证的 RESTful API,那么你完全不需要 CSRF 保护。

CSRF 发生在另一个网站向您发出请求时,并且该网站恰好由于身份验证基于 cookie 或类似内容而

进行身份验证当身份验证碰巧在HTTP标头上时,其他网站根本无法制作表单来执行此类请求,它们没有足够的权限将标头添加到其请求中,因此,请求将未经身份验证,用户将是安全的。如果您将授权令牌存储在localStorage中,那么他们也无法访问该令牌。

所以基本上,通过Authorization标头验证您的 API 并禁用 CSRF 保护,然后您应该没问题。

哦,我找到了解决方案,我忘记了这是愚蠢的基本:Laravel拥有自己的API身份验证。所以我需要做的就是使用 API 身份验证中的令牌,而不是使用 CSRF 的 Cookie 进行普通身份验证。 感谢您阅读我的问题!如果打扰你们,请原谅我^^

最新更新