@symfony_php

Страница 798 из 1418
Sergey
31.03.2018
12:02:17
думай дальше)

это можно все сделать на одной табличке если ты придумаешь одну модель данных)

p.s. подсказка - у тебя есть jsonb и прочие штуки

Вадим
31.03.2018
12:03:49
ну у меня мускуль )

Google
Sergey
31.03.2018
12:03:58
mysql 5.7 умеет в json

или ты еще на 5.6 сидишь?

Вадим
31.03.2018
12:04:21
Ну да в 2-м кейсе, историю можно хранить в виде сериализированого массива

Sergey
31.03.2018
12:04:53
Ну да в 2-м кейсе, историю можно хранить в виде сериализированого массива
по факту не важно как хранить, выборки по этим данным ты делать всеравно не будешь

в mysql 5.6 у тебя там будет просто TEXT

Вадим
31.03.2018
12:05:28
Угу. Но в 1 юскейсе так не получится )

Либо хардкодом в энтитю забить ))))

Sergey
31.03.2018
12:06:15
да, тут нужно либо имплементацию сущности подменять либо думать как можно вынести проверку пароля во вне

ну я просто тебе накидываю) что бы не так скучно было)

Вадим
31.03.2018
12:07:57
Да у меня тут и так накинуто, не могу придумать ) Как мне сделать так что б пароли хешировались, а токены нет, и что б в одной табличке )

Sergey
31.03.2018
12:08:20
ну вывод - разделить модель поведения и модель данных)

(но не сервисы менеджеры)

Google
Sergey
31.03.2018
12:08:43
а еще - возможно в этом бандле не юзать ORM)

Вадим
31.03.2018
12:09:05
Я хотел скрестить ежа с ужом ) и окрамиуса и твою идею ) А оно не идет )

хм ... вариант с password_needs_rehash в конструкторе решило бы проблему, но тогда энкодер будет зашит в сущность. И тогда теряется гибкость )

Sergey
31.03.2018
12:14:00
эт как?

короч я бы тебе рекомендовал на самом деле пойти сверху вних, то есть начать с того что бы продумать как твоим бандлом будут пользоваться

а что внутри - не столь важно уже

но как по мне - все взаимодействие с твоей либкой должно идти строго через какие-то сервисы, и к сущностям не надо подпускать

Вадим
31.03.2018
12:15:07
Ну типа public function __construct(string $identity,string $secret, $type, $isSecured=true) isSecured укажед нужно ли хешировать

Sergey
31.03.2018
12:15:17
можно давать возможность предоставлять свои реализации "сущностей" но тогда надо что бы не конфликтовало с другими фичами

Вадим
31.03.2018
12:15:33
но как по мне - все взаимодействие с твоей либкой должно идти строго через какие-то сервисы, и к сущностям не надо подпускать
Ну я пока отдельно бандл не делаю, я делаю живой проджект. А потом наработки хочу вынести в бандл, если будет красиво

Sergey
31.03.2018
12:15:47
просто взять код из живого проекта не особо выйдет

все будет просто прибито гвоздями

Вадим
31.03.2018
12:16:17
а, не, либо живой проект либо бандл
Я стараюсь писать так что б потом это можно было взять.

Sergey
31.03.2018
12:16:20
а что бы "гибко" - живому проекту это не надо)

Я стараюсь писать так что б потом это можно было взять.
не стоит... лучше пару раз попробовать заимплементить по разному

Google
Sergey
31.03.2018
12:16:46
а потом уже сделать выводы и запилить с нуля но реюзабельно

а так ты только время потратишь и гибкости не получится

Вадим
31.03.2018
12:17:35
Ну я хоть основу сделаю, что б правильно было, а в след раз или перепишу или допилю )

Я весь код стараюсь писать так что б не было гвоздей ) Даже раньше когда писал проджект в разных бандлах, а потом один бандл тупо с адаптерами, который связывал бандлы между собой.

Идею увидел у symfony-*-bridge

Alan
31.03.2018
13:23:09
а зачем хранить токены?

это те которые ты выдаёшь в обмен на успешную oauth2?

Valentin
31.03.2018
13:26:43
Привет, сейчас делаю аутентификацию и регистрацию через апи на симфони 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 недели условно (в зависимости от настроен токена), как можно этого избежать? Выдавать токены на год? Пока на этом всё, буду благодарен за любые ответы

Вадим
31.03.2018
13:28:39
Pavel
31.03.2018
13:39:35
Привет, сейчас делаю аутентификацию и регистрацию через апи на симфони 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 недели условно (в зависимости от настроен токена), как можно этого избежать? Выдавать токены на год? Пока на этом всё, буду благодарен за любые ответы
Зачем тебе сессия в api?

Valentin
31.03.2018
13:44:43
Зачем тебе сессия в api?
Специально же в кавычки взял, это не сессия, как может быть сессия в апи если оно у нас стейтлесс, это я имел ввиду авторизация будет слетать каждый раз когда токен становится експайред

Valentin
31.03.2018
13:48:34
Тоже думаю об этом, нет в этом каких то подводных камней? Вроде всё прозрачно, но всё же решил тут спросить, по сути да, я могу удалять токен когда юзер вышел (логаут) или когда его забанили допустим

Valentin
31.03.2018
13:50:44
Ну в этом случае токен надо выдавать максимум на пару минут, потому что иначе его можно спиздить и даже за час уже наломать дров

Google
Pavel
31.03.2018
13:52:02
он шлет его еще раз

Valentin
31.03.2018
13:52:32
он шлет его еще раз
Его? Или опять логин и пароль?

Pavel
31.03.2018
13:52:45
Valentin
31.03.2018
13:53:17
Вот я не хочу что бы юзер вводил логин и пароль каждые пол часа

Pavel
31.03.2018
13:53:32


интересный метод

Valentin
31.03.2018
13:54:44
интересный метод
Он работает только если stateless: false т.е на пхп сессиях

ну и все, убирай время жизни
Ну а как тогда юзера защитить?

Pavel
31.03.2018
13:55:17
Admin
ERROR: S client not available

Pavel
31.03.2018
13:55:24
Себя надо защищать

а не юзера

Valentin
31.03.2018
13:55:27
Я же не ввожу в телеграме допустим свой пароль каждый час

Pavel
31.03.2018
13:55:56
Я же не ввожу в телеграме допустим свой пароль каждый час
Зато на каждом новом устройстве вводишь

Valentin
31.03.2018
13:58:01
Зато на каждом новом устройстве вводишь
Хочу так же сделать для своих юзеров, что почитать?

Pavel
31.03.2018
13:59:57
Хочу так же сделать для своих юзеров, что почитать?
хз) я думаю там по мак адресу и айпишнику новое устройство опознавать можно

Valentin
31.03.2018
14:17:00
хз) я думаю там по мак адресу и айпишнику новое устройство опознавать можно
Всё сводится к либо юзай Oauth2 либо jwt, а как обойтись без этого и при этом защитить юзеров - хз :( ладно, спасибо, буду думать дальше

Pavel
31.03.2018
14:17:20
Да никак ты юзеров не защитишь

Valentin
31.03.2018
14:23:15
Почему то я тебе не верю)

Google
Вадим
31.03.2018
14:26:52
Либо вводить refresh token как в oauth

Alan
31.03.2018
14:48:12
https + если в локалсторадже хранишь то защищаться от xss, если в куках то от csrf/xsrf аттак, и кнопочка выйти на всех устройствах

Danil
31.03.2018
17:02:36
Вообще перед тем, как всё делать, стоило почитать про oauth

Vladislav
31.03.2018
17:03:53
oauth и jwt исполюзуются для разных задач

Danil
31.03.2018
17:04:25
И посмотреть вот сюда https://github.com/thephpleague/oauth2-server

Sergey
31.03.2018
17:05:50
Refresh token же
http://cryto.net/~joepie91/blog/attachments/jwt-flowchart.png

Danil
31.03.2018
17:06:27
Да я про jwt вообще молчал)

Vladislav
31.03.2018
17:06:50
а зачем oauth ему?

Sergey
31.03.2018
17:07:18
а зачем oauth ему?
вот я никогда не понимал людей которые рекомендую oauth там где нет "третьей стороны"

клево конечно когда ты можешь замутить отдельный auth сервер

но зачем... для простого проекта - oauth....

Danil
31.03.2018
17:08:06
Видимо потому что хочет) вопрос-то не «что выбрать»

Danil
31.03.2018
17:08:32
Автор вопроса

Sergey
31.03.2018
17:08:52
автор вопроса хочет аутентификацию для апишки, где-то увидел про oauth, где-то про jwt

не первый день он с этим вопросом

Danil
31.03.2018
17:09:19
В итоге пилит все вместе

Konstantin
31.03.2018
17:09:32
а че сразу бандла готового нет? )))

Sergey
31.03.2018
17:09:43
вроде.... ни разу не приходилось юзать

Danil
31.03.2018
17:10:40
Вроде на основе phpleague и сделали бандл

Valentin
31.03.2018
17:10:50
Пилю сам потому что проект для обучения, знаю что есть бандлы готовые, хочу без них и при этом что бы по безопасности не было проблем

Страница 798 из 1418