теперь не поднимается вообще
the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:2
далее хотел php-fpm поднять и там похожая ошибка
[pool www] 'user' directive is ignored when FPM is not running as root
единственное что
если храним с рефрешем еще и фингерпринт
то если у нас хакер крадет токены и пытается обновить их
то его фингерпринтбудет другой. а мы сверяем строго рефреш + фингерпринт
и мы ему ничего не выписываем и сразу обрубаем. те он пользуется тлоько 15 минут нашим аксесом, больше преимуществ нет, или они есть?
с условием что в playload аксеса у нас только user_id и больше никаких данных
единственное что смущает - храннеие рефрешев, получается для 1ого клиента мы храним все его страые рефреши, которые каждые 15 минут обновляются, а если клиентов будет 100к и каждые 15 минут 100к записей в БД новых (новые рефреш + старые рефреш)
Rsa97, я верно понимаю что фингерпринт не нужен вообще?
даже если несколько устройств, ведь для каждого "входа" сервер и клиент имеет рефреш токен и он однозначно определяет сессию?
везде пишут что нужен фингерпринт устройства с которого логинят, а я не понимаю заем, если и без него будет работать?
1) клиент логинится получает пару токенов (рефреш хрнаим в базе)
2) клеит юзает сой аксес и обновляет свою пару через рефреш (мы а базе рефреш старый помечаем использованный, создаем новый рефреш когда он нам прилетает)
никаких фингерпринтов, даже если будет 10 устройств - они пересекаться не будут
Допустим хакер крадет и рефреш и акксес
1) ходит с акксес токеном
2) рефрешит его (мы в базе старый помечаем использованным) новый ему даем
3) клиент юзает сой рефреш м по бзе видим что он у нас уже использованный - выходим отовсюду. те удаляем рефреш токены
зачем все говорят что для логина на нескольких устройствах нужен фигнерпринт?
Rsa97 верно, у меня нигде противоположного не сказано
украли токены
с их помощью обновили и получили новые
клиент уже не может обновить свои (его рефреш затер злоумышленник) и его "разлогинивает" так скажем, а злоумышленник продолжает сидеть в учетке настоящего клиента
1) В базе у нас есть таблица
user_id, fingerprint, refresh_token, exp_at
те строка соответствия id юзера, какого-то ключа устройства (фингерпринт) и сам рефреш-токен с датой валидности
2) злоумышленник украл наши токеныи шлет запрос на обновление токена (шлет ведь сразу оба токена?)
из access_token мы получаем (user_id + fingerprint), хоть он и просрочен
смотрим рефреш токен в базе
те ищем строку user_id + fingerprint + refresh_token
есть такая строка (логи нашего настоящего клиента ее туда поместил)
3) для злоумышленника генерируем новый аксес-токен и новый рефреш-токен обновляем в бд запись
user_id + fingerprint + refresh_token
злоумышленник всем этим прекрасно пользуется неограниченное время
4) наш пользователь аналогично пользуется своим аксес-токен, но он у него заканчивается и он шлет запрос обновления
5) мы в базе ищем его рефреш токен
user_id + fingerprint + refresh_token
и не находим, так как его обновил наш злоумышленник со соим фингерпринт, используя ранее украденные токены
6) соответсвенно клиента кидаем на авторизацию, он логинится и получает свои 2 токена, а злоумышленник продолжает пользоваться токенами. Приложение думает что просто клиент наш авторизован с 2ух устройств сразу и все в норме
Что-то я н понимаю, подскажите пожалуйста где ошибка?
Правильно ли я все понял касательно API магазина для сайта и мобильного устройства
Если клиент не авторизован и заходит на сайт\приложение
1.1) просматривая товары и другие страницы дергаются только GET запросы и никаких токенов пока не нужно (за исключением личного кабинета)
1.2) как только неизвестный клиент кладет товар в корзину, я создаю в базе информацию и генерирую например JWT токены (access\reresh) и передаю их на клиент (клиент у себя их как-то хранит и c этого момента access в заголовке всегда мне отдает)
1.3) по заголовку я всегда знаю, что сессия с клиентом не закончилась и легко получаю всю его корзину, избранные, недавно просмотренные и тп из своей бд\redis
1.4) как только он логинится\регается, я в бд записываю его id (в таблице с корзинами заполняю поле user_id чтобы знать чья это корзина), но передавать он мне попрежнему access продолжает, который ранее получил, положив самый первый товар в корзину
Если клиент автризован и заходит на сайт\приложение все аналогично только логика начинается с шага 1.3 тк токены у клиента уже есть и по ним я информацию могу получит
мобильное приложение не знаю где хранит токены (наверняка там есть у них хранилище)
а сайт (nuxt.js) хранит токены в куках
все ли я верно понял и можно реализовывать по такой схеме? она верная и используется?
Хочется написать правильно, чтобы другим людям (фронтендшиками и мобильным разработчикам) се было понятно и удобно, те сделать все по правилам
Кирилл Горелов, c php все прекрасно, сейчас вытаскиваю из MVC парадигмы битрикса шаблоны template.php
и переношу на проект с nuxt.js, соответственно этот проект - это отдельный сервер с отдельным репозиторием, преследуются цели:
1) создание 2ух ответственностей: фронта и бека и как следствие 2ух команд (с 2мя репозиториями git), чтобы не пришлось фронтедщикам поднимать у себя весь битрикс с его базой в десяток гигов. В конце концов хочу получить 2 репы, которые ничего друг о друге не знают и общаются через api, сгенерированное тем же Swagger
2) сайт работает с тем же api по той же документации с теми же методами авторизации что и приложение
поэтому node.js + проект большой и я уже вижу как node.js легко и просто подгружает код кусками и даже первичное отображение стало в разы плавнее и быстрее, в отличии от рендеринга страниц, которые отдает битрикс
php хороший и нет никаких к нему вопросов, но пока не понимаю суть вашего вопроса, вы знаете путь проще, лучше в масштабируемости и долгосрочной поддержке, которые не требует ноду и можно остаться на пхп?
0xD34F
Спасибо, ваша функция работает, буду разбираться в ней!
Подскажите как добраться до таких же навыков применения алгоритмов?
может у вас книги есть на примере, которые дают хороший толчок?