首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Yii2 REST API中的CSRF令牌和cookie存储的令牌

Yii2 REST API中的CSRF令牌和cookie存储的令牌
EN

Stack Overflow用户
提问于 2018-08-17 21:09:10
回答 1查看 1.2K关注 0票数 1

我有一台运行Yii2的服务器,其中只有一个API端点,另一台服务器有一个单页面应用程序,可以从Yii服务器获取所有数据。

当应用程序成功登录时,我将JWT-Token存储在cookie中,并且我有一个基于此的自定义AuthMethod。

我的问题是,当cookies用于身份验证时,CSRF保护必须到位。yii应用程序会自动设置_csrf cookie,但目前它不会做太多事情。

据我所知,我需要在登录时将这个csrf令牌提供给前端应用程序,以便它可以存储在本地存储中,并在所有后续请求的头部中发送。

我已经使用Yii::$app->request->csrfTokenFromHeader实现了对csrf令牌的检查,并在X-CSRF-Token http头中发送了令牌。

我无法提取与应用程序内部cookie中存储的值相同的值。Yii::$app->request->getCsrfToken()Yii::$app->request->csrfToken都返回与_csrf-cookie中存储的令牌不同的令牌。

这来自我的登录终结点:

代码语言:javascript
运行
复制
$token = $model->setCookie(); // Sets the JWT-Token HttpOnly Cookie
$response = [
    'message' => 'Login successful',
    'csrf-token' => Yii::$app->request->getCsrfToken() // This does not match the _csrf cookie
];
EN

Stack Overflow用户

回答已采纳

发布于 2018-08-17 21:31:10

在阅读了更多的源代码后,我发现这个令牌需要取消屏蔽。这是在用Request->validateCsrfToken()调用的Request->validateCsrfTokenInternal()中完成的。

我将以下行添加到我的AuthMethod中:

代码语言:javascript
运行
复制
if (!\Yii::$app->request->validateCsrfToken()) throw new HttpException(401, 'Invalid CSRF Token');

这会自动检查X-CSRF-Token-header。

我留下这个问题,以防其他人也有同样的问题。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51896159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档