yii2 REST身份验证保留其身份验证信息

时间:2018-03-28 12:51:31

标签: rest authentication cookies yii2

我正在使用Yii2中的REST模块。客户端能够在服务器上进行身份验证,并且还能够获取请求的响应。我已经看到,客户端对系统进行一次身份验证。似乎客户端存储其身份验证信息,因为不需要对后续请求进行进一步的身份验证。

当然,我感兴趣的是每个REST请求都需要身份验证。我已经看到,可能有一种方法可以在应用程序的配置中进行一些固定设置,我希望避免这种情况。

我猜认证信息存储在cookie中。我假设cookie名为'_csrf-frontend'。现在我尝试在控制器功能中删除此cookie。

$cookies = \Yii::$app->response->cookies;
$cookies->remove('_csrf-frontend');
unset($cookies['_csrf-frontend']);

我添加了另外推荐的Idgs答案设置,但仍然没有运气。刷新页面后,必须保留身份验证信息,因为仍然不需要身份验证。

在标题中看一下:

Response Header:
Cache-Control   no-store, no-cache, must-revalidate
Connection  Keep-Alive
Content-Type    application/json; charset=UTF-8
Date    Thu, 29 Mar 2018 06:36:37 GMT
Expires Thu, 19 Nov 1981 08:52:00 GMT
Keep-Alive  timeout=5, max=100
Pragma  no-cache
Server  Apache/2.4.18 (Ubuntu)
Set-Cookie  _csrf-frontend=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; HttpOnly _identity-frontend=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; Max-Age=0; path=/; HttpOnly
Transfer-Encoding   chunked

Request Header:
Accept  text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language de,en-US;q=0.7,en;q=0.3
Authorization   Basic ZG9yaXMua3JhdXNAdmVydHJlbmQuY29tOktyYXVzMTAwMA==
Connection  keep-alive
Cookie  eafab809c11b0a847c07e9c4f2b93936=uv3f1tof6la24616p7bkf59p55; advanced-frontend=mobbni6v6492kde73amtdvcqi3; _csrf-frontend=4d2ddb54290d2fa7fcc9c4a9900726b795e83aadc658fc0f50395bf7ded0c86aa%3A2%3A%7Bi%3A0%3Bs%3A14%3A%22_csrf-frontend%22%3Bi%3A1%3Bs%3A32%3A%22Oiy_JOiLMg_X0Hz666f0OWpG_r-jcvnO%22%3B%7D
DNT 1
Host    localhost
Upgrade-Insecure-Requests   1
User-Agent  Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0

只有当我删除Firefox中的所有Browsers Chronik时,才会出现新的身份验证请求。

1 个答案:

答案 0 :(得分:0)

可能不是设置登录cookie的CSRF功能,请参阅:rest-authentication docs,它告诉您如何禁用登录会话。

禁用会话

如果您不想使用推荐的配置设置:

'user' => [
    'enableSession' => false,
    'enableAutoLogin' => false,

您可以在控制器中设置值,如:

public function init()
{
    parent::init();
    Yii::$app->user->enableSession = false;
    Yii::$app->user->loginUrl = null;
}

禁用CSRF

如果您还想关闭CSRF(例如,如果您的API中有任何Web表单POSTS),请更新您的网站 config 中的request组件,如:

'components' => [
    'request' => [
        'enableCsrfValidation' => false,

或要在控制器中关闭CSRF,请使用:

$this->enableCsrfValidation = false;

(显然,如果您将其关闭,您可能希望实施自己的CSRF保护。)