在cakephp 4中保存token(JWT)的最佳方法是什么?

bjg7j2ky  于 2022-11-24  发布在  PHP
关注(0)|答案(1)|浏览(180)

我有一个项目,我用nodejs做了后端。我做了一个用户注册模块,认证会生成一个令牌!这个令牌需要用在用户必须登录的其他请求中。

使用cakephp 4在前端存储此令牌的最佳方式是什么?

是否存在组件?使用会话存储此令牌是否安全?
如果有人能帮我分析一下这个案子我会很感激的。
这是我的身份验证方法:

public function login()
    {
        $http = new Client();
        
        if ($this->request->is('post')) {
            $response = $http->post(
                'http://localhost:8889/api/auth/login',
                [
                    'email' => $this->request->getData("username"),
                    'password' => $this->request->getData("password"),
                ]
            );

            if ($response->getStatusCode() == 401) {
                return $this->redirect($this->referer());
            }

            if ($response->isOk()) {
                $json = $response->getJSON();
                    return $this->redirect(['action' => 'home', 'controller' => 'Pages']);
            }
        }
    }

返回200包含一个accessToken。

ig9co6j1

ig9co6j11#

存储令牌的最佳方式是使用HttpOnly Cookie。
根据Microsoft开发人员网络,HttpOnly是包含在Set-Cookie HTTP响应标头中的附加标志。在生成Cookie时使用HttpOnly标志有助于降低客户端脚本访问受保护Cookie的风险(如果浏览器支持)。
如果您将其存储在LocalStorage/SessionStorage中,则XSS攻击(从Javascript/客户端)很容易获取它
CakePHP 4的做法是这样的:
https://book.cakephp.org/4/en/controllers/request-response.html#creating-cookies

$cookie = new Cookie(
    'jwt_token', // name
    'token', // value
    new DateTime('+1 hour'), // expiration time
    '/', // path
    'example.com', // domain
    true, // secure only?
    true // http only -> this is what you need
);

相关问题