@graphql_ru
GraphQL — русскоговорящее сообщество

Общаемся на темы, посвященные GraphQL и опыту его использования. Проблемы. Новости. Решения. Вам могут быть полезны: @apollo_ru, @react_js, @vuejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание в чате было полезным и комфортным.

352 members

Архив канала @graphql_ru 7 мая 2018 г.

07:38:24 ДП
User 224769697
А кто нибудь делал отдельный сервис с регистрацией/авторизацией для сервера с графом? Или может есть какие нибудь готовые сервисы, граф вообще никак не был с этим связан, а просто в контексте получал бы данные о юзере?
07:39:40 ДП
User 224769697
Я читал что можно сделать клиентский сервер с ssr и авторизацией, и с него проксировать запросы на сервер с графом, может есть что то готовое?)
07:47:31 ДП
User 530735
В контексте лучше подкидывать токен
07:48:50 ДП
User 224769697
Ну если доступ к серверу только через прокси, то не вижу смысла добавлять логику работы м токенами, если можно просто юзера или его id прокинуть)
07:49:10 ДП
User 530735
Прокидывай jwt, а на бэке разбирай его
07:50:58 ДП
User 224769697
Основной вопрос не в этом, а в том как прифигачить отдельный сервис для авторизации, чтобы эту логику убрать из сервера с графом, и может тогда есть готовое решение для этого)
08:03:46 ДП
User 228403837
User 224769697
Основной вопрос не в этом, а в том как прифигачить отдельный сервис для авторизации, чтобы эту логику убрать из сервера с графом, и может тогда есть готовое решение для этого)
есть конечно, от платных (auth0) до бесплатных (пиши сам)))
08:04:22 ДП
User 228403837
если ты на aws работаешь - там есть cognito
08:05:26 ДП
User 228403837
https://github.com/keratin/authn-server  - вот из готовых есть
github.com/keratin/authn-server
Authentication service that keeps you in control without forcing you to be an expert in web security. - keratin/authn-server
08:06:17 ДП
User 228403837
более-менее толковый, но я еще не успел заюзать
08:06:37 ДП
User 224769697
О, впринципе посмотреть апи платного auth0 и написать самому чтото подобное для себя - норм вариант)
08:07:09 ДП
User 224769697
За последнюю ссылку отдельное огромное спасибо)
08:08:37 ДП
User 122824793
а в чем смысл таких танцев? в выделении авторизации в отдельный сервис
08:08:46 ДП
User 228403837
User 122824793
а в чем смысл таких танцев? в выделении авторизации в отдельный сервис
что бы не писать код
08:09:21 ДП
User 228403837
аутентификация - это стандартная штука. Особенно если тебе нужны всякие там ревоуки сессий, восстановление доступа, SSO и т.д.
08:09:35 ДП
User 228403837
писать каждый раз - скучно, хочется поднять docker контейнер и юзать
08:09:49 ДП
08:10:04 ДП
User 122824793
так это получится отдельный контейнер, с отдельной нодой и прочее, правильно?
08:10:13 ДП
User 228403837
User 122824793
так это получится отдельный контейнер, с отдельной нодой и прочее, правильно?
с какой "нодой"? просто отдельный контейнер, изолированный от всего остального приложения
08:10:28 ДП
User 228403837
как вы это любите
08:10:35 ДП
User 122824793
node js, ну или что там у вас на сервере
08:10:46 ДП
User 228403837
в том то и прикол - не важно что у тебя на сервере
08:10:56 ДП
User 228403837
у меня вот на сервере php и нода)
08:11:13 ДП
User 228403837
может быть в ближайшем будущем JMV+котлин появится
08:13:34 ДП
User 50245406
User 224769697
Основной вопрос не в этом, а в том как прифигачить отдельный сервис для авторизации, чтобы эту логику убрать из сервера с графом, и может тогда есть готовое решение для этого)
Я писал отдельный auth сервис, у меня graphql сам по себе закрытый, поэтому jwt токен всегда нужен. Отправляю его вместе с graphql запросом, перед обработкой запроса разбираю его, чекаю и отправляю данные о юзера с правами в context
08:14:30 ДП
User 228403837
User 50245406
Я писал отдельный auth сервис, у меня graphql сам по себе закрытый, поэтому jwt токен всегда нужен. Отправляю его вместе с graphql запросом, перед обработкой запроса разбираю его, чекаю и отправляю данные о юзера с правами в context
ну вот я ссылку на готовый дал - интересно твое мнение
08:15:45 ДП
User 122824793
User 50245406
Я писал отдельный auth сервис, у меня graphql сам по себе закрытый, поэтому jwt токен всегда нужен. Отправляю его вместе с graphql запросом, перед обработкой запроса разбираю его, чекаю и отправляю данные о юзера с правами в context
а роли реализовал?)
08:16:03 ДП
User 50245406
User 122824793
а роли реализовал?)
На след неделе буду хд
08:16:38 ДП
User 50245406
User 228403837
ну вот я ссылку на готовый дал - интересно твое мнение
Готовый проще использовать если не нужно какого то хитрого функционала
08:17:21 ДП
User 228403837
User 50245406
Готовый проще использовать если не нужно какого то хитрого функционала
ну вот у меня на проекте довольно хитрый функционал, в целом пока смотрю этот сервер и все "хитрое" спокойно выносится в мидлвар сверху
08:18:00 ДП
User 50245406
Зависит от того фанат ли ты придумывания велосипедов
08:18:41 ДП
User 228403837
User 50245406
Зависит от того фанат ли ты придумывания велосипедов
не, я уже вырос из этого)
08:19:35 ДП
User 122824793
User 50245406
На след неделе буду хд
давай в опен сорс, накидаем тебе звёзд охапку всем сообществом
08:19:38 ДП
08:19:58 ДП
User 224769697
А у сервиса авторизации и у основного сервера должен быть доступ к базе данных с юзерами?
10:19:57 ДП
User 50245406
От структуры зависит, если у тебя все в одной базе лежит в одном месте, то скорей всего да
10:20:56 ДП
User 50245406
Хотя говорят, что это не очень хороший аппроач шейрить одну базу между разными сервисами
10:21:50 ДП
User 50245406
У меня сервис с юзерами выделен и я к нему как из graphql, так и из auth сервиса по rest эндпоинтам обращаюсь
10:23:05 ДП
User 224769697
а сервис сам делал?)
10:23:08 ДП
User 50245406
Напрямую доступа к базе нет. Не знаю насколько это оправдано может быть в твоём случае. На самом деле больше косплексити добавляет на мой взгляд
10:23:11 ДП
User 50245406
Ну да
10:24:58 ДП
User 50245406
Не нашёл я auth сервис с persistent jwt токенами, поэтому решил сам написать. Сейчас скорей всего взял бы что-то готовое и добавил бы middleware
10:26:16 ДП
User 224769697
Буду искать готовый подходящий вариант)
10:26:42 ДП
User 50245406
Чекни ту штуку на go, что скидывали, выглядит вроде норм
10:27:06 ДП
User 224769697
О.язательно)
10:27:52 ДП
User 50245406
User 122824793
давай в опен сорс, накидаем тебе звёзд охапку всем сообществом
Свой проект делал бы, то открыл бы)
А так компания по щам надаёт)
10:51:57 ДП
11:03:15 ДП
User 50245406
Все сейчас слишком серьезны из-за GDPR
12:10:11 ПП
User 321317845
User 50245406
Не нашёл я auth сервис с persistent jwt токенами, поэтому решил сам написать. Сейчас скорей всего взял бы что-то готовое и добавил бы middleware
а что значит “persistent” в контексте этой сообщеньки?
12:11:33 ПП
User 50245406
Вайтлист токенов, которые не ревоукнуты
12:12:17 ПП
User 50245406
Нужно, чтобы трекить ивенты вроде смены пароля или снятия/добавления пермишнов
12:12:58 ПП
User 50245406
Ибо по умолчанию если токен выдан, то он валиден до expiration date
12:20:37 ПП
User 228403837
User 50245406
Вайтлист токенов, которые не ревоукнуты
делай токены на 5 минут
12:20:56 ПП
User 228403837
ну и если ты делаешь whitelist то тебе не нужен JWT
12:21:00 ПП
User 228403837
ладно бы делал блэклист
12:21:05 ПП
User 228403837
это более-менее еще кастыль
12:31:34 ПП
User 50245406
User 228403837
делай токены на 5 минут
Они на 10 стоят
Вся проблема в рефреш токенах, которые выдаются на продолжительный срок. Блеклист разростается быстрее, чем вайтлист, плюс, что вайтлист, что блеклист - это все равно database hit.
12:32:14 ПП
User 50245406
В чем конкретно проблема вайтлиста? На мой взгляд точно так же можно сказать, что jwt не нужны, если есть какой-нибудь лист в приципе
12:40:41 ПП
User 321317845
а зачем ревоукать один токен, если можно сделать на порядок проще - тупо подмешивать из юзера какой-нибудь хеш
12:41:03 ПП
User 321317845
получится, что сброс - это тупо обновление этого хеша у юзера
12:41:27 ПП
User 321317845
правда тогда вообще все более ранние токены отлетят
12:41:34 ПП
User 321317845
но это мелочи
12:42:16 ПП
User 50245406
Я думаю это не проблема с ранними токенами. Идея интресная, надо будет подумать в этом ключе)
12:42:53 ПП
User 50245406
А что если нужно определённый девайс ривоукить?
12:43:10 ПП
User 50245406
На который был уже выдан токен
12:45:29 ПП
User 321317845
о, вот тут уже так просто не получится
12:45:58 ПП
User 321317845
но тут и JWT тогда не нужен уже
12:46:29 ПП
User 321317845
задача JWT - это быть DB-agnostic штукой
12:47:35 ПП
User 228403837
сходить в базу что бы сгенерить ключ которым проверить подпись.... хм.... прям явно видно что шаришь в HMAC)
12:48:57 ПП
User 228403837
User 50245406
Они на 10 стоят
Вся проблема в рефреш токенах, которые выдаются на продолжительный срок. Блеклист разростается быстрее, чем вайтлист, плюс, что вайтлист, что блеклист - это все равно database hit.
блэклист спокойло ложится в рэдис, так как у токенов ограничено время жизни + можно сделать фильтр блума что бы совсем мало занимало.

Что до рефрешей - их то ревоукать не проблема, это ж не JWT. Они в базе там лежат.
12:49:25 ПП
User 228403837
да и обычно штуки которые меняют креды и делают невалидными оные находятся в том же контексте что и штука которая токены эти выдает.
12:49:39 ПП
User 228403837
так что вообще никаких проблем
01:00:27 ПП
User 50245406
User 228403837
блэклист спокойло ложится в рэдис, так как у токенов ограничено время жизни + можно сделать фильтр блума что бы совсем мало занимало.

Что до рефрешей - их то ревоукать не проблема, это ж не JWT. Они в базе там лежат.
Может я чего то неправильно уловил, но рефреши у меня - это тоже токены, и они лежат в редисе в этом самом вайтлисте
01:01:23 ПП
User 228403837
User 50245406
Может я чего то неправильно уловил, но рефреши у меня - это тоже токены, и они лежат в редисе в этом самом вайтлисте
идея в том что вайтлист чувствителен к консистентности а блэклист нет и из-за этого он легко скейлится)
01:01:49 ПП
User 228403837
а так как блэклист всегда меньше чем вайтлист то ты можешь хоть у каждой ноды держать рядом реплику
01:11:58 ПП
User 50245406
Окей, спасибо за наводку, когда доберусь до auth сервиса, гляну что там можно переписать, чтобы адекватные выглядело
01:15:41 ПП
User 228403837
User 50245406
Окей, спасибо за наводку, когда доберусь до auth сервиса, гляну что там можно переписать, чтобы адекватные выглядело
если нет проблем - не трогай
01:16:02 ПП
User 50245406
Работает как часы
01:16:27 ПП
User 50245406
Но переписывать/дописывать потом все равно надо будет
02:26:45 ПП
User 50245406
@fes0r ещё такой консерн, есть блеклист дропнется, то токены опять валидными будут. Есть варианты как эту проблему просто решить?
02:32:53 ПП
User 228403837
User 50245406
@fes0r ещё такой консерн, есть блеклист дропнется, то токены опять валидными будут. Есть варианты как эту проблему просто решить?
у токенов TTL
02:33:02 ПП
User 228403837
а рефреш токен это просто идентификатор сессии
02:33:16 ПП
User 228403837
инвалидировал сессию - все хорошо, с рефреш токенами все в целом хорошо потому что их не надо скейлить особо
02:33:26 ПП
User 228403837
ну то есть там в целом ограниченое количество запросов
05:28:48 ПП
User 144022504
User 224769697
А кто нибудь делал отдельный сервис с регистрацией/авторизацией для сервера с графом? Или может есть какие нибудь готовые сервисы, граф вообще никак не был с этим связан, а просто в контексте получал бы данные о юзере?
у Prisma все уже написано и в open source
https://github.com/graphcool/prisma/tree/master/examples
github.com/graphcool/prisma/tree/master/examples
prisma - ⚡️ Prisma turns your database into a realtime GraphQL API
06:22:55 ПП
User 249356274
Всем привет. Хочется поинтересоваться у кого какое мнение на счет react-apollo? Где-то полгода назад я от него отказался, из-за того что все время приходилось в каких-то ситуациях писать костыли или просто что-то не работало так как надо. Сейчас (точно не знаю когда) вроде как вышла новая версия с различными линками. Вот сейчас думаю, стоит ли попробовать react-apollo снова или просто юзать apollo-fetch, а в redux наводить порядок с помощью normalizr. Ну и вообще кто что считает на счет того, что юзать на фронте?
07:17:53 ПП
User 457622465
User 249356274
Всем привет. Хочется поинтересоваться у кого какое мнение на счет react-apollo? Где-то полгода назад я от него отказался, из-за того что все время приходилось в каких-то ситуациях писать костыли или просто что-то не работало так как надо. Сейчас (точно не знаю когда) вроде как вышла новая версия с различными линками. Вот сейчас думаю, стоит ли попробовать react-apollo снова или просто юзать apollo-fetch, а в redux наводить порядок с помощью normalizr. Ну и вообще кто что считает на счет того, что юзать на фронте?
Привет. Юзаю react-apollo уже больше чем пол года. На данный момент все устраивает, больших проблем не припомню.
07:18:36 ПП
User 249356274
User 457622465
Привет. Юзаю react-apollo уже больше чем пол года. На данный момент все устраивает, больших проблем не припомню.
Ну сейчас почитал доки. Там много чего изменилось. Особенно понравилась тема с https://www.apollographql.com/docs/link/links/state.html#combine
apollographql.com/docs/link/links/state.html
Manage your local data with Apollo Client
07:21:04 ПП
User 457622465
User 249356274
Ну сейчас почитал доки. Там много чего изменилось. Особенно понравилась тема с https://www.apollographql.com/docs/link/links/state.html#combine
apollographql.com/docs/link/links/state.html
Manage your local data with Apollo Client
Ага. Убрал из одного проекта завязку на redux благодаря линк стейту. Хотя по началу думал что будут проблемы.
07:26:22 ПП
User 249356274
User 457622465
Ага. Убрал из одного проекта завязку на redux благодаря линк стейту. Хотя по началу думал что будут проблемы.
вот сейчас тоже думаю убирать редакс или нет
07:34:41 ПП
User 457622465
Тут стоит ответить на вопрос: много ли ты получишь профита если перепишешь это все? Также следует учитывать на какой стадии находится проект.
08:10:04 ПП
User 249356274
User 457622465
Тут стоит ответить на вопрос: много ли ты получишь профита если перепишешь это все? Также следует учитывать на какой стадии находится проект.
Получить могу много. Я думаю даже быстрее разработка пойдет. Там переписать нужно разве что систему авторизации. Ну и состояние роутера у меня в редаксе. Вот с роутингом пока не знаю что делать