У меня вопрос, нужно ли в yii2 регенерировать ключ после каждой успешной аутентификации (как это рекомендовалось делать для yii1) ? Или для yii2 это уже не актуально и если так то расскажите почему, поскольку судя по беглому просмотру исходного кода, это попрежнему актуально, как и для yii1.Если пользователь входит через форму ещё раз, ключ регенерируется.
Аутентификация authKey
Аутентификация authKey
Здравствуйте. Хочу начать делать аутентификацию. Прочитал эту статью, а также ознакомился с yii\web\User и yii\web\IdentityInterface, а также посмотрел примеры реализации аутентификации в basic и advanced. Возник вопрос по поводу authKey. В примерах приложений я не увидел, чтобы authKey где-то регенерировался каждый раз заново при успешной аутентификации. В документации к yii2 тоже не нашел упоминания о том, что так нужно делать, в отличии от документации по yii1 где об этом прямо сказано
Re: Аутентификация authKey
Код: Выделить всё
protected function loginByCookie()
{
$value = Yii::$app->getRequest()->getCookies()->getValue($this->identityCookie['name']);
if ($value === null) {
return;
}
$data = json_decode($value, true);
if (count($data) !== 3 || !isset($data[0], $data[1], $data[2])) {
return;
}
list ($id, $authKey, $duration) = $data;
/* @var $class IdentityInterface */
$class = $this->identityClass;
$identity = $class::findIdentity($id);
if ($identity === null) {
return;
} elseif (!$identity instanceof IdentityInterface) {
throw new InvalidValueException("$class::findIdentity() must return an object implementing IdentityInterface.");
}
if ($identity->validateAuthKey($authKey)) {
if ($this->beforeLogin($identity, true, $duration)) {
$this->switchIdentity($identity, $this->autoRenewCookie ? $duration : 0);
$ip = Yii::$app->getRequest()->getUserIP();
Yii::info("User '$id' logged in from $ip via cookie.", __METHOD__);
$this->afterLogin($identity, true, $duration);
}
} else {
Yii::warning("Invalid auth key attempted for user '$id': $authKey", __METHOD__);
}
}
Re: Аутентификация authKey
Вот ответ https://github.com/yiisoft/yii2/issues/ ... t-57328569 гласящий о том, что authKey регенерировать нужно, наверное об этом бы следовало в документации упомянуть (или может я просто не увидел).
Тем более в advanced я нашел, что authKey создается однажды при регистрации и потом нигде не регенерируется, то есть по-сути статичный, а значит и смысла в нем в таком случае никакого, так как кука бессмертная.
Ну или я чего-то не понимаю.
Тем более в advanced я нашел, что authKey создается однажды при регистрации и потом нигде не регенерируется, то есть по-сути статичный, а значит и смысла в нем в таком случае никакого, так как кука бессмертная.
Ну или я чего-то не понимаю.
-
- Сообщения: 101
- Зарегистрирован: 2012.06.05, 14:32
- Откуда: Петрозаводск
- Контактная информация:
Re: Аутентификация authKey
Вы чего-то не понимаете.
Насколько мне известно, authKey вводит дополнительный уровень безопасности кук (собственно об этом и говорит Qiang по ссылке, которую вы привели). То есть при каждом обращении к сайту, из базы дергается этот authKey и сверяется с записанным в куках, если они равны, то все нормально, если нет, то пользователь будет автоматически разлогинен.
По ссылке, которую вы привели, написано, что регенерировать authKey МОЖНО (а не нужно) для того, чтобы инвалидировать куку логина.
Насколько мне известно, authKey вводит дополнительный уровень безопасности кук (собственно об этом и говорит Qiang по ссылке, которую вы привели). То есть при каждом обращении к сайту, из базы дергается этот authKey и сверяется с записанным в куках, если они равны, то все нормально, если нет, то пользователь будет автоматически разлогинен.
По ссылке, которую вы привели, написано, что регенерировать authKey МОЖНО (а не нужно) для того, чтобы инвалидировать куку логина.
Re: Аутентификация authKey
Ну да он написал что можно. Да authKey из кук сверяется с тем, что в базе. Но я говорю о том, что если authKey не регенерируется (например при каждой успешной аутентификации), то кука по-сути бессмертная и от authKey смысла ровно ноль. В таком случае, если у пользователя украли куку, что он будет делать? У него нет никакой возможности сделать эту куку невалидной, вот например как в advanced.
-
- Сообщения: 101
- Зарегистрирован: 2012.06.05, 14:32
- Откуда: Петрозаводск
- Контактная информация:
Re: Аутентификация authKey
authKey защищает куки не от кражи, а от подделки (об этом и говорит Qiang - "authKey will still help to make sure you cannot make up a cookie"). В качестве защиты от кражи кук используется cookie validation. То есть куки шифруются с помощью ключа, указанного в cookieValidationKey (у компонента request).
Re: Аутентификация authKey
dmeroff, а я то думал что всё наоборот, что $enableCookieValidation чтобы защититься от подделки кук, а оказывается, разработчики yii2 всё напутали и совсем не о том в docblock написали. Спасибо, что подсказали. Не желаете ли пулл риквест сделать?/**
* @var boolean whether cookies should be validated to ensure they are not tampered. Defaults to true.
*/
public $enableCookieValidation = true;
Re: Аутентификация authKey
Вы не ошиблись? Вроде сейчас нет такого поведения (хотели добавить, обсуждали). Т.е. auth_key не сверяется при каждом (!) запросе. Указанное вами поведение устраивает, привел к такому же виду. Но это не из коробки.dmeroff писал(а):Вы чего-то не понимаете.
То есть при каждом обращении к сайту, из базы дергается этот authKey и сверяется с записанным в куках, если они равны, то все нормально, если нет, то пользователь будет автоматически разлогинен.
Re: Аутентификация authKey
Все эти полтора года он ждал именно твоего ответаRamix писал(а):Вы не ошиблись? Вроде сейчас нет такого поведения (хотели добавить, обсуждали). Т.е. auth_key не сверяется при каждом (!) запросе. Указанное вами поведение устраивает, привел к такому же виду. Но это не из коробки.dmeroff писал(а):Вы чего-то не понимаете.
То есть при каждом обращении к сайту, из базы дергается этот authKey и сверяется с записанным в куках, если они равны, то все нормально, если нет, то пользователь будет автоматически разлогинен.
Re: Аутентификация authKey
Мне всё-равно когда был написан предыдущий комментарий, хоть 10 лет назад. В этой теме велось определенное обсуждение и я его продолжил. Писать в эту тему нельзя? Так закрой ее, ты ж модер.
Re: Аутентификация authKey
Я вот подумал, что ситуация, когда пользователь может быть залогиненным в разных браузерах не очень безопасная.
Т.е. например, когда человек с чужого компьютера заходит, и забывает выйти из пользователя. Или один компьютер общий в семье (сейчас конечно редкость, но были годы, когда это было нормой).
Думаю, дай посмотрю, на что влияет этот auth_key.
Вошел под одним пользователем в Chrome, под тем же пользователем в Firefox ("с параметром запомнить меня").
Потом зашел в БД, поменял значение auth_key.
Проверяю Chrome и Firefox, пользователь в системе остался. Подумал, что тут вроде ничего страшного, сессия то продолжается.
Я закрыл вкладку с сайтом, закрыл Chrome, зашел на сайт, пользователь не в системе, думаю, здорово. Всё работает, как я и думал. Думаю, сейчас запилю при входе на сайт пользователя перегенерацию auth_key, и будет мне счастье.
Я закрыл вкладку с сайтом, закрыл Firefox, зашел на сайт, пользователь в системе. И понял, что я ничего не понимаю. То ли баг, то ли оно работает, не так как я думал. Зачем этот auth_key тогда нужен?...
Yii 2.0.15.1
Т.е. например, когда человек с чужого компьютера заходит, и забывает выйти из пользователя. Или один компьютер общий в семье (сейчас конечно редкость, но были годы, когда это было нормой).
Думаю, дай посмотрю, на что влияет этот auth_key.
Вошел под одним пользователем в Chrome, под тем же пользователем в Firefox ("с параметром запомнить меня").
Потом зашел в БД, поменял значение auth_key.
Проверяю Chrome и Firefox, пользователь в системе остался. Подумал, что тут вроде ничего страшного, сессия то продолжается.
Я закрыл вкладку с сайтом, закрыл Chrome, зашел на сайт, пользователь не в системе, думаю, здорово. Всё работает, как я и думал. Думаю, сейчас запилю при входе на сайт пользователя перегенерацию auth_key, и будет мне счастье.
Я закрыл вкладку с сайтом, закрыл Firefox, зашел на сайт, пользователь в системе. И понял, что я ничего не понимаю. То ли баг, то ли оно работает, не так как я думал. Зачем этот auth_key тогда нужен?...
Yii 2.0.15.1
- Dominus
- Сообщения: 892
- Зарегистрирован: 2013.03.14, 21:27
- Откуда: Россия, Иваново
- Контактная информация:
Re: Аутентификация authKey
auth_key нужен например для RESTful api, играет роль как access_token
https://github.com/yiisoft/yii2/blob/ma ... ication.md
https://github.com/yiisoft/yii2/blob/ma ... ication.md
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
Re: Аутентификация authKey
Интересное дело. В advenced зарегил пользователя, добавил adminLTE, доступа на регистрацию нету ни на backend ни на frontend. Все ок.
Но понадобилось таки сменить пароль единственному пользователю backend'а. Ок, нашел генерацию, вывел, в базу сохранил. Хорошо казалось бы, все? А вот нифига. Пароль сменен, но пользователи залогененные под этим пользователем ранее спокойно продолжают работать. Удалил auth_key - никакого эффекта. Спокойно продолжаем работу. Кстати, не знаю где настраивается время сессии, не трогал с создания сайта - один раз зашел и живет бесконечно, уже с месяц точно. Почистил куки - выкинуло. Авторизовался с новым паролем - auth_key как был пустой так и остался. Нет никакого толку от него. Да и вообще такое поведение авторизации "из коробки" очень глупое.
Но понадобилось таки сменить пароль единственному пользователю backend'а. Ок, нашел генерацию, вывел, в базу сохранил. Хорошо казалось бы, все? А вот нифига. Пароль сменен, но пользователи залогененные под этим пользователем ранее спокойно продолжают работать. Удалил auth_key - никакого эффекта. Спокойно продолжаем работу. Кстати, не знаю где настраивается время сессии, не трогал с создания сайта - один раз зашел и живет бесконечно, уже с месяц точно. Почистил куки - выкинуло. Авторизовался с новым паролем - auth_key как был пустой так и остался. Нет никакого толку от него. Да и вообще такое поведение авторизации "из коробки" очень глупое.
Re: Аутентификация authKey
Здравствуйте!
Вы правы валидация auth_key не где не срабатывала!
Вчера написал компонент который базовый наследует, но с небольшими правками. вот он https://github.com/borysenko/yii2-user-component
Попробуйте сменить auth_key в бд и вас тут же разлогинет.
Сайт по работе в Украине: https://jobis.com.ua/. Сайт по поиску строителей: https://stroyzakaz.com.ua/
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.
Создание сайтов в Киеве: https://webplus.com.ua/ по доступной цене.