
Daniel
19.08.2017
15:13:49
Надо срочно понять
В Sentry прям жестко указан лимит сообщения в 1000 символов?
Нет времени разбираться, просто у меня INFO с данными запроса и INFO с данными ответа - не влезает
.D

Google

Daniel
19.08.2017
15:32:58
\Raven_Client::MESSAGE_LIMIT
2:
Raven_Util::set($options, 'message_limit', self::MESSAGE_LIMIT)

Alexey
19.08.2017
19:37:44
Кто нибудь использовал fractal для сериализации различных выборок в json формат. Или это лишний оверхед и serializer symfony вполне достаточно?

Sergey
19.08.2017
20:12:11
@fes0r вроде топил за фрактал

Sergey
20.08.2017
09:31:37
я сейчас думаю как его видоизменить что бы упростить работу с ним
ну мол.... если у тебя active record то фрактал вообще хорошо
а так... есть вопросы

Alexey
20.08.2017
12:25:55
Кто нибудь использует у себя на проект аутентификацию с использованием jwt? Мне интересен вопрос, как организвать выход с нескольких устройств или блокировку токена. Пока думаю при логине записывать так же токен в redis или memcahed типо: auth:[user_id]:token и проверять если такой токен если нет значит бросаем на страничку входа и для этого будет необходимо реализвать свой кастомный провайдер аутентификации (токен, листенер, фабрику). И еще интересует refresh токен. Я правильно понимаю, что если человек пришел с истекшим jwt токеном, то мы идем ищем его в базе и если есть refresh токен, то генерируем новый access?

Виктор
20.08.2017
12:35:43
зачем что-то хранить в базе и использовать jwt?
сам по себе jwt - это фактически хранилище информации
могу ошибаться - но по-моему совмещать нет смысла - используй любой ИД для токена и храни в базе тогда все

Google

Sergey
20.08.2017
12:44:45
вопервых стоит определиться зачем тебе refresh токены
обычно их используют для усложнения MITM атак
ну мол кто-то перехватил токен и это может быть только на определенное время
другой вариант зачем нужны рефреш токены - если нет другого способа инвалидировать сессию.

Gaiaz Iusipov
20.08.2017
12:46:12
Есть, должен быть.

Sergey
20.08.2017
12:46:53
использовать же рефреш токены для инвалидации сессиий по времени - не очень затея
лучше организовать блэк лист для инвалидации нужных токенов

Gaiaz Iusipov
20.08.2017
12:47:26
Если у пользователя крадут пару токенов то хакер зарефрешит у себя и пользователь останется неавтортзован
Далее он авторизовывается и инвалидная пара у хакера уже
Думаю что-то все таки хранить надо
Но не уверен

Sergey
20.08.2017
12:48:39
и не все а лишь часть

Gaiaz Iusipov
20.08.2017
12:50:08

Sergey
20.08.2017
12:50:32
зависит от задачи. В большинстве случаев мне надо инвалидировать все сессии пользователя
а это значит что я просто добавляю ID нужного пользователя в блэклист
ну то есть в JWT у нас есть время выдачи токена, время действия, есть идентификатор пользователя
это дает тебе возможность реализовать самые разные механизмы инвалидации

Gaiaz Iusipov
20.08.2017
12:51:39
А как инвалидтровать пару жвт и рефреш?

Sergey
20.08.2017
12:52:03
с рефрешами все просто - тебе сервер аунентификации просто не выдаст новый токен

Google

Sergey
20.08.2017
12:52:09
рефрешы у тебя в базе хранятся
а вот jwt - просто не пускаешь, кидаешь 401
клиент должен в этом случае просто разлогинить
запись в блэклисте можно хранить на период на который ты выдаешь людям jwt токены

Gaiaz Iusipov
20.08.2017
12:52:41
Ну так как я инвалидирую то его

Sergey
20.08.2017
12:52:53

Gaiaz Iusipov
20.08.2017
12:53:06
Перевариваю про блек лист

Sergey
20.08.2017
12:53:34
тебе придет запрос с JWT для пользователя в блэк листе сессиий. Например мы добавили правило "считай невалидными все JWT токены этого чела которые он получал до такого-то времени"
и если твой токен подпадает под правило - просто не пускаешь дальше
а поскольку блэклист у тебя будет относительно небольшим (малый процент всех пользователей)
то как бы нет проблем

Gaiaz Iusipov
20.08.2017
12:56:43
Такая ситуация.
Пользователь прошел аутификацию, авторизовали его
Хакер украл пару
Через 5 минут хакер рефрешнул себе пару
Пользователь заново недоумевая аутифицируется и авторизовывается
Вопрос как инвалидировать пару у хакера не трогая пару пользователя

Sergey
20.08.2017
12:58:28
и как ты собрался это инвалидировать?)
ну то есть
по другому
зачем тебе это инвалидировать если никто не жаловался? с точки зрения сервера ты можешь максимум затрекать что внезапно токены эти начали приходить с совсем другого IP

Gaiaz Iusipov
20.08.2017
12:59:23
Я вот и спрашиваю ? я хз как, но такой вариант работы видел при изучении

Sergey
20.08.2017
12:59:47
прикол в том что нам нельзя просто дропнуть сессию пользователя
если у него внезапно поменялся IP это может быть по вполне обычным причинам

Gaiaz Iusipov
20.08.2017
13:00:27

Google

Sergey
20.08.2017
13:02:16
можно еще по юзерагенту сверять

Gaiaz Iusipov
20.08.2017
13:02:39

Admin
ERROR: S client not available

Gaiaz Iusipov
20.08.2017
13:04:08

Sergey
20.08.2017
13:08:57
ну и ты можешь прямо в JWT записать какому IP ты доверяешь
что бы зафорсить рефреш в случае смены IP
все очень от задачи зависит

Alexey
20.08.2017
13:10:15
@fes0r А какой флоу при использовании refresh токена. Приходит пользватель => истек срок => достаем id пользователя => ищем в базе, если есть то новый токен? Но что будет если кто-то перехватил токен => тогда держим его в блэклисте и при рефреше проверяем токен?

Sergey
20.08.2017
13:10:47
эм...
если jwt истек - клиент отправляет запрос с рефреш токеном на получение нового
рефреш токены хранятся в базе, это просто набор рандомных байт

Alexey
20.08.2017
13:11:32
Но на клиенте не хранится рефреш

Sergey
20.08.2017
13:11:38
так что ты не по ID юзера достаешь а по токену
при атворизации ты получаешь пару токенов
jwt + refresh

Google

Sergey
20.08.2017
13:11:59
во всех запросах юзаешь только jwt
для получения нового jwt юзаешь только refresh и получаешь новую пару
а это значит что если у тебя один пользователь успешно обновил себе пару токенов и потом послал старый - значит что-то не то

Alexey
20.08.2017
13:13:07
@fes0r Спасибо. Наконец-то понял)

Gaiaz Iusipov
20.08.2017
13:13:07
Рефреш нужен для auth сервера для обновления пары при истечения expiredOn

Alexey
20.08.2017
13:14:26
А как быть в случае аутентификации с различных устройств, если refresh меняется?

Sergey
20.08.2017
13:15:08
ну то есть типа как "несколько сессий"
а вообще лайфхак - берешь auth0 и делаешь все на нем)
5 баксов в месяц каких и у тебя там все, и инвалидация сессий, и управление сессиями пользователей, и восстановление пароля

Антон
20.08.2017
15:40:25
правда ли что функционал баднлов удалят из симфони?
если я делаю монолитное приложение достаточно использовать AppBundle для проекта?