
Sergey
31.03.2018
17:11:16

Valentin
31.03.2018
17:12:03
Да вроде начал, не терзают сомнения что получилось норм
Но*

Konstantin
31.03.2018
17:12:48
могу еще своих проблем накинуть, можно? )))

Google

Sergey
31.03.2018
17:13:45


Valentin
31.03.2018
17:14:03
Привет, сейчас делаю аутентификацию и регистрацию через апи на симфони 4, кому не жалко пары минут - посмотрите код пожалуйста,
скажите что я сделал не так и что стоит переделать что бы я себе не выстрелил в колено.
Сейчас у меня есть 2 аутентификатора: PasswordAuthenticator - его задача найти юзера по логину и паролю, выдать в ответ токен который клиент должен будет передавать через (/api/users?apiKey=...), этот аутентификатор работает только по пути /api/login.
Второй же TokenAuthenticator - на его плечах найти юзера по токену и авторизировать его, если никого не нашли - ничего страшного, запрос идёт дальше, возможно для этого роута не требуется авторизации, этот аутентификатор работает по всех роутах с префиксом /api
А теперь вопросы которые меня беспокоят - кто должен отвечать за генерацию токена?
Нормально ли делать так: https://github.com/svbackend/my-art-lib/blob/master/src/Security/PasswordAuthenticator.php#L72 ? Интересует мнение не только по этой строке но и по всему методу
Второй момент это инвалидация токенов, как лучше всего это организовать и где? Пока что пришёл к этому - надо вынести токены в отдельную таблицу куда добавить поле expires_at, TokenAuthenticator будет загружать токен только когда expires_at >= NOW() если же токен нашёлся но просрочился - требуем юзера авторизироваться заново, но не нравится момент что в этом случае в юзера "сессия" будет слетать каждые там 2 недели условно (в зависимости от настроен токена), как можно этого избежать? Выдавать токены на год?
Пока на этом всё, буду благодарен за любые ответы
Я тут выше чуть не целую статью написал с объяснением что мне не нравится в том что у меня получлось


Alan
31.03.2018
17:14:58
половину методов перекрываешь чтоб реализовать

Sergey
31.03.2018
17:16:04


Konstantin
31.03.2018
17:22:37
кароч я не соображаю как надо вот такое например сделать:
1. мобильное приложение с авторизацией через соцсети и без авторизации
2. отдельные юзеры с логином-паролем (приваты) (не мобильное приложение)
3. среди "хотелок" - статистика кругом (как мне видится статистика по апи собирается через токены)
==========
исходя из этого мне подумалось что доступ к апи невозможен без, как минимум, токена доступа, который дается автоматом (для паблик части где не требуется авторизация), т.к. если нет токена - как отслеживать клиента для статы? непонятно.
раз нужен анонимный токен - чисто как маркер - значит его надо как то выдавать.
вот тут первый затык - как и насколько давать его?
подумал еще - нужна авторизация через соцсети в апке. однако, по хорошему, ключи нельзя хранить в телефоне т.к. это несекьюрно, а делать авторизацию через сервер,
вот тут второй затык - я не совсем понимаю схему в деталях. видел общий набросок в виде uml диаграммы но конкретики там нет.
т.е. например если я авторизуюсь в приложении через вк - что делается в первую очередь? обращаться на сервер чтобы он сгенерил урл для авторизации, который потом на телефоне открывается браузером/нативным приложением соцсетей?


Alan
31.03.2018
17:24:06
> т.к. если нет токена - как отслеживать клиента для статы? непонятно.
uuid ?

Sergey
31.03.2018
17:24:31
> т.к. если нет токена - как отслеживать клиента для статы?
какой именно статы?

Konstantin
31.03.2018
17:24:55
ну откуда мне знать, какую то статистику просто хотят собирать
может по каким товарам больше спрос например

Sergey
31.03.2018
17:25:15
> ключи нельзя хранить в телефоне т.к. это несекьюрно
ну телефоны обычно работают напрямую через SDK и там все продумано, не надо изобретать.

Konstantin
31.03.2018
17:25:29
не не, вот тут как раз у меня жесткая позиция

Sergey
31.03.2018
17:25:31

Google


f4rt~
31.03.2018
17:25:55
Привет, сейчас делаю аутентификацию и регистрацию через апи на симфони 4, кому не жалко пары минут - посмотрите код пожалуйста,
скажите что я сделал не так и что стоит переделать что бы я себе не выстрелил в колено.
Сейчас у меня есть 2 аутентификатора: PasswordAuthenticator - его задача найти юзера по логину и паролю, выдать в ответ токен который клиент должен будет передавать через (/api/users?apiKey=...), этот аутентификатор работает только по пути /api/login.
Второй же TokenAuthenticator - на его плечах найти юзера по токену и авторизировать его, если никого не нашли - ничего страшного, запрос идёт дальше, возможно для этого роута не требуется авторизации, этот аутентификатор работает по всех роутах с префиксом /api
А теперь вопросы которые меня беспокоят - кто должен отвечать за генерацию токена?
Нормально ли делать так: https://github.com/svbackend/my-art-lib/blob/master/src/Security/PasswordAuthenticator.php#L72 ? Интересует мнение не только по этой строке но и по всему методу
Второй момент это инвалидация токенов, как лучше всего это организовать и где? Пока что пришёл к этому - надо вынести токены в отдельную таблицу куда добавить поле expires_at, TokenAuthenticator будет загружать токен только когда expires_at >= NOW() если же токен нашёлся но просрочился - требуем юзера авторизироваться заново, но не нравится момент что в этом случае в юзера "сессия" будет слетать каждые там 2 недели условно (в зависимости от настроен токена), как можно этого избежать? Выдавать токены на год?
Пока на этом всё, буду благодарен за любые ответы
мне не понравилось, имхо.


Alan
31.03.2018
17:26:43

Konstantin
31.03.2018
17:27:08
мобильное приложение )

f4rt~
31.03.2018
17:27:29
очень плохие тесты, куча решений "в лоб" вроде репозиториев и длинны токена, вызывают вопроса роли, слишком много делают контроллеры, сущности вообще без поведения, такое

Sergey
31.03.2018
17:27:31

Alan
31.03.2018
17:27:31
localstorage

Konstantin
31.03.2018
17:28:27
мне это кажется странной идеей чтобы тонкий клиент сам что то генерировал

Alan
31.03.2018
17:28:27

Konstantin
31.03.2018
17:29:26
тут еще такой камень о который можно споткнуться - может быть авторизация на нескольких устройствах и синхронизация данных

Sergey
31.03.2018
17:29:51

Konstantin
31.03.2018
17:31:00
к анонимным никакой, они ползают по обычным гет запросам до тех пор пока не понадобится что то сохранить (заказ, избранное итп).
в этот момент уже требуется авторизация, через соцсеть

Sergey
31.03.2018
17:31:19

Konstantin
31.03.2018
17:31:31
то что секреты не хранить на телефоне

Sergey
31.03.2018
17:31:45
те секреты которые нужны для телефона можно хранить на клиенте
вшивать их в приложение

Konstantin
31.03.2018
17:32:03
можно но не нужно
ну, свои эксперты есть и в андроид секьюрности и я уже посмотрел пару докладов
хранить там ничего не нужно. кроме гугл мапс ключа )

Sergey
31.03.2018
17:35:32

Google

Konstantin
31.03.2018
17:36:01
когда я предложил этот вариант мне тоже сказали что это не айс. ключи не надо передавать по сети, только данные )

Alan
31.03.2018
17:36:34
ключи бывают разные)
публичные и приватные)

Konstantin
31.03.2018
17:36:43
ключи для доступа к апишкам лежат на сервере. мобильные клиенты логинятся через сервер
это вроде authentication flow или типа того называется
а то что без сервера - implicit flow

Sergey
31.03.2018
17:37:36

Konstantin
31.03.2018
17:37:41
это в контексте oauth2 если что )
все ломается так или иначе

Valentin
31.03.2018
17:38:06
очень плохие тесты, куча решений "в лоб" вроде репозиториев и длинны токена, вызывают вопроса роли, слишком много делают контроллеры, сущности вообще без поведения, такое
Тесты впервые пробую писать, это исправлю как только будет больше информации..
Контроллеры - там есть один метод который заполняет User entity из реквеста и отдает его на проверку валидатора - как это вынести из контроллера? В формы?
Репозитории - а вот в них я вообще не вижу проблем, ну кроме этой проверки на длину юзернейма, пока не знаю как исправить, мне туда приходит либо логин либо емейл либо токен, я бы с радостью отправлял токен на другой метод но пока не нашёл как
больше спасибо за фидбек

Sergey
31.03.2018
17:38:51
все ломается так или иначе
ну так и твой подход не неуязвим, не находишь? вопрос в том сколько ты инвестируешь в это и как все это соотносится с рисками

Konstantin
31.03.2018
17:39:39
а не рассматриваешь случай когда просто взяли и потеряли аккаунт от соцсети?

Alan
31.03.2018
17:39:41
давайте про jwt и авторизацию вконтакте

Bohdan
31.03.2018
17:39:44

Konstantin
31.03.2018
17:39:48
и надо завести новую апку или ключ
и для этого пересобирать приложение и выкладывать... а можно просто на сервере ключ заменить

Bohdan
31.03.2018
17:40:34
кто потерял аккаунт?

Sergey
31.03.2018
17:40:55

Konstantin
31.03.2018
17:40:57
тот кто на нем заводит приложение

Google

Konstantin
31.03.2018
17:41:03
чтобы можно было через соцсети войти

Sergey
31.03.2018
17:41:25
тот кто на нем заводит приложение
не, кейс с распиздяйством давай не будем рассматривать ибо при таком раскладе не понятно почему ты вообще о безопасности думаешь настолько)

Konstantin
31.03.2018
17:41:28
3 соцсети - 3 разных аккаунта, на каждом приложение, для каждого ключ

Bohdan
31.03.2018
17:42:07
если клиент - зачем пересобирать аппку?

Sergey
31.03.2018
17:42:16
если ключ вшит в исходник - то тебе придется пересобирать
а юзерам обновляться

Konstantin
31.03.2018
17:42:37
ага
при каждом чихе

Admin
ERROR: S client not available

Sergey
31.03.2018
17:42:51

Alan
31.03.2018
17:42:59
выпускаешь новую версию в аппке показываешь алерт с каминаутом
и просьбой обновиться)
такое встречается

Konstantin
31.03.2018
17:43:25
это плохо влияет на юзер экспириенс

Sergey
31.03.2018
17:43:25

Bohdan
31.03.2018
17:43:43
я чего-то явно не понимаю
ты про девелоперский ключ к апи социалки?

Sergey
31.03.2018
17:43:45

Konstantin
31.03.2018
17:44:02
стоит взглянуть шире
последняя рабочая апка была такая - калькулятор страховки

Google

Bohdan
31.03.2018
17:44:34
или ключ, который пользователь получил при логине через социалку?

Sergey
31.03.2018
17:44:44

Konstantin
31.03.2018
17:44:50
реальная приватная апка, андроид версию делал я, а иос версию делали другие пацаны
ну и они начали первые. а там же различные коэффициенты рассчета
и зашили все это в приложение
когда я начал свою делать решил что стоит просто вытащить это в один файл json, с дефолтной версией в апке и обновлением по сети
через месяц когда апкой уже начали пользоваться надо было сменить процентные ставки
и угадай что было ) я потратил пару минут чтобы на сервере поправить
а ребята неделю чтобы новую версию на иос выпустить
так что нет - делать через сервер совсем таки не плохо

Sergey
31.03.2018
17:47:51
и причем тут ключи?

Alan
31.03.2018
17:47:58
так может и приложение вынести в веб?))
чтоб не обновлять ниче

Sergey
31.03.2018
17:48:31

Konstantin
31.03.2018
17:48:43
вебвью медленнее чем нативный код

Sergey
31.03.2018
17:48:58

Konstantin
31.03.2018
17:49:05
хотя там и можно рулить через свой жс например

Sergey
31.03.2018
17:49:40