Немного тенденций на украинском рынке 🙀
Подскочил очередной квартальный отчёт от djinni.
Основные тезисы, которые показались мне интересными :
- кол-во кандидатов перед количеством вакансий перевалило за 1 к 9. Кого один, а кого девять думаю догадаетесь сами😕
- мидлы-сеньоры просели по зп на 10% (но у самых опытных синиоров и самых неопытных джунов просадки нет). кек
- QA совсем плохо. с апреля 2023 борьба за одну вакансию увеличилась с 30 до 36 человек. Примерно туда же пришли дизайнеры и HR'ы.
- на девопс и секурити спрос чуть-чуть вырос
- фронтендеры упали по зарплате относительно других сильнее
- питонисты за счёт ИИ хайпа показывают рост
- JS самая жирная категория на рынке
- .net относительно неплохо себя чувствует, т.к. не так много конкурентов в отличии от js, но и предложений в два раза меньше, но ratio в этом плане лучше
- маркетологи, саппорт и продажники в относительном дефиците на рынке
- 25% вакансий на Джине - вне Украины (Польша тут лидер, 15 процентов из 25, Грузия 1.6%, Португалия 1.8%)
- прослеживается тенденция к запихиванию гребцов втрюмы офисы
- 27% кандидатов на Джинни не из Украины
У вас мало времени и мы в вас это ценим, поэтому выводы вы сделаете сами😂
Подскочил очередной квартальный отчёт от djinni.
Основные тезисы, которые показались мне интересными :
- кол-во кандидатов перед количеством вакансий перевалило за 1 к 9. Кого один, а кого девять думаю догадаетесь сами
- мидлы-сеньоры просели по зп на 10% (но у самых опытных синиоров и самых неопытных джунов просадки нет). кек
- QA совсем плохо. с апреля 2023 борьба за одну вакансию увеличилась с 30 до 36 человек. Примерно туда же пришли дизайнеры и HR'ы.
- на девопс и секурити спрос чуть-чуть вырос
- фронтендеры упали по зарплате относительно других сильнее
- питонисты за счёт ИИ хайпа показывают рост
- JS самая жирная категория на рынке
- .net относительно неплохо себя чувствует, т.к. не так много конкурентов в отличии от js, но и предложений в два раза меньше, но ratio в этом плане лучше
- маркетологи, саппорт и продажники в относительном дефиците на рынке
- 25% вакансий на Джине - вне Украины (Польша тут лидер, 15 процентов из 25, Грузия 1.6%, Португалия 1.8%)
- прослеживается тенденция к запихиванию гребцов в
- 27% кандидатов на Джинни не из Украины
У вас мало времени и мы в вас это ценим, поэтому выводы вы сделаете сами
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤🔥1🔥1🤯1
Менеджер здорового человека? Да ладно! 😰
Они что, бывают такие? Бывают. Крутая статья про выгоревшую команду со сломанными процессами и менеджера здорового человека, который пришёл и всё исправил : https://habr.com/ru/companies/gazprombank/articles/699738/
Каждый его шаг откликается и болью и одобрением, потому что почти все такие сломанные вещи я уже видел в разных командах.
Приятно удивило в конце про анонимные опросники. Это так очевидно и ... эффективно. На самом деле... сложно написать анонимку так, чтобы не было понятно от кого она, но дело в другом - сама такая возможность очень важна как минимальный "контракт" доверия между менеджментом и гребцами.
В общем, рекомендасьон!
Они что, бывают такие? Бывают. Крутая статья про выгоревшую команду со сломанными процессами и менеджера здорового человека, который пришёл и всё исправил : https://habr.com/ru/companies/gazprombank/articles/699738/
Каждый его шаг откликается и болью и одобрением, потому что почти все такие сломанные вещи я уже видел в разных командах.
Приятно удивило в конце про анонимные опросники. Это так очевидно и ... эффективно. На самом деле... сложно написать анонимку так, чтобы не было понятно от кого она, но дело в другом - сама такая возможность очень важна как минимальный "контракт" доверия между менеджментом и гребцами.
В общем, рекомендасьон!
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Что будет, если от разработчиков не отстать: умирающая команда
Мне досталась команда, которая болела. Все понимали, что происходит, никому не нравилось, что творится в команде, и традиционно менеджеры такие команды сильно режут. Но здесь были шансы вылечить и без...
👍9❤🔥1🔥1
iPhone 14 Pro. Личный опыт перехода с Samsung 😎
Вы просили (нет). Я сделал.
- Клавиатура - эт бомбяо🏖
- Интерфейс богов
- Внимание к мелочам
- Кроссплатформенность - работает?
Эт я об айфоне или таки о самсунге? Так кто лучше-то? Ответ в статье
Впечатления настолько яркие, что в рамках поста всё это поместить не получилось.
ps. Как всегда приветствую разорвавшиеся задницы с комментариями и слюной в комментариях.
ps2. Если у вас был похожий опыт - делитесь в комментариях о том как вы выжили, интересно будет почитать.
Налетай!❤️
🏃♀️ 🏃♀️ 🏃♀️ ➡️ https://telegra.ph/Iphone-vs-Android-Kak-zhe-blolno-08-12
Вы просили (
- Клавиатура - эт бомбяо
- Интерфейс богов
- Внимание к мелочам
- Кроссплатформенность - работает?
Эт я об айфоне или таки о самсунге? Так кто лучше-то? Ответ в статье
Впечатления настолько яркие, что в рамках поста всё это поместить не получилось.
ps. Как всегда приветствую разорвавшиеся задницы с комментариями и слюной в комментариях.
ps2. Если у вас был похожий опыт - делитесь в комментариях о том как вы выжили, интересно будет почитать.
Налетай!
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegraph
Iphone vs Android? Как же [б|л]ольно...
Делюсь своим опытом использования iPhone 14 PRO. В двух словах это не описать, поэтому пришлось корячить небольшую статью.
👍6🔥5🌚2❤🔥1💩1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🤣5😁3
Шагал тут на днях и подумалось - вот было бы окнорм, если бы аишечка определяла перфоманс отдельно взятого человека и его влияние на прибыль компании. Мммм? Звучит же! Столько народа сразу можно увольнять к ебенифени ))) Сразу станет понятно, кто компанию на разных уровнях тянет ко дну.
Правда в таком деле - миллион параметров (от внутренних, до внешних), это примерно как погоду предсказывать, но "по верхам" в целом можно же. Ведь любые действия имеют последствия, условный граф с миллионами ветвей и пересечений с другими такими же графами. Теоретически, возможно. Особенно если срезы делать по тайтлам. Чем выше тайтл, тем больше "эффект" от действий. Но наше дело маленькое в большинстве случаев - апишечки, формочки, архитектурки. Если иметь какой-то референс, основанный на других похожих бизнесах/решений... и это тоже теоретически возможно "оценить". Ну не рокет саенс же. Если можно нанять по человеку на каждый такой "экшон" = "коммит изменений", (где под коммитом принять всё - от строчек кода до имплементаций процессов и бизнес решений) и детерминировать до мелких шагов, где каждый шаг - условное "ребро" графа со своим "весом эффективности", то можно и картинку уже нарисовать. А если можно выяснить, значит и аишечка сможет.
А потом подумал ещё раз - если аишечка будет уметь понимать кто эффективен, значит сможет и обучаться на этой информации делать бизнес лучше сам. Там нам все и трындец как рабочей силе хД
В общем, я ещё раз подумал - я против всей этой АИ движухи! Все на улице окажутся, даже эффективные😂 😂 😂
Но если кто хочет вложиться в такой стартап - высылайте мне деньги, я попробую на ноде написать. Кто знает, есть готовый NPM пакет?😂 😂 😂
Шутки шутками, а я верю, что так и будет⌨️
Правда в таком деле - миллион параметров (от внутренних, до внешних), это примерно как погоду предсказывать, но "по верхам" в целом можно же. Ведь любые действия имеют последствия, условный граф с миллионами ветвей и пересечений с другими такими же графами. Теоретически, возможно. Особенно если срезы делать по тайтлам. Чем выше тайтл, тем больше "эффект" от действий. Но наше дело маленькое в большинстве случаев - апишечки, формочки, архитектурки. Если иметь какой-то референс, основанный на других похожих бизнесах/решений... и это тоже теоретически возможно "оценить". Ну не рокет саенс же. Если можно нанять по человеку на каждый такой "экшон" = "коммит изменений", (где под коммитом принять всё - от строчек кода до имплементаций процессов и бизнес решений) и детерминировать до мелких шагов, где каждый шаг - условное "ребро" графа со своим "весом эффективности", то можно и картинку уже нарисовать. А если можно выяснить, значит и аишечка сможет.
А потом подумал ещё раз - если аишечка будет уметь понимать кто эффективен, значит сможет и обучаться на этой информации делать бизнес лучше сам. Там нам все и трындец как рабочей силе хД
В общем, я ещё раз подумал - я против всей этой АИ движухи! Все на улице окажутся, даже эффективные
Но если кто хочет вложиться в такой стартап - высылайте мне деньги, я попробую на ноде написать. Кто знает, есть готовый NPM пакет?
Шутки шутками, а я верю, что так и будет
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8😁4💩2👀2🌚1
Ловите пару неплохих докладов про GraphQL
https://www.youtube.com/watch?v=YgRmgHPTXr4 - доклад 2017-ого, но по прежнему актуален, докладчик очень живой и сама презентация хороша с примерами на Java.
https://www.youtube.com/watch?v=3fHKySh07ow - доклад с HighLoad конфы (этого года), где пацаны рассказывают как переводили Яндекс.Афишу (+кинопоиск) на GraphQL - он уже чуть более сложный (но в рамках), скорее для мидлов/помидоров.
Оба примерно по часу🍌
У меня сейчас проект на GraphQL. Что я могу сказать - интересная технология, но её нужно правильно готовить. Уже собрано прилично граблей и костылей.
Одни проблемы REST Api она решает :
- больше контроля над схемой
- "клиентам" проще создавать чуть более гибкие запросы при надобности
- уменьшает кол-во передаваемых данных по сети (клиентам-мобилкам зайдёт)
Но как по мне бОльше проблем создаёт :
- Проблема с N+1. Это когда у вас вместо батч запросов, двиг графа бегает в базу за каждой энтитей (тут есть решение, но он тоже компромиссное если у вас serverless - DataLoader)
- Кеширование. GraphQL строится ПОВЕРХ http и у вас все запросы бегут по одному урлу - невозможно использовать стандартные механизмы http кеширования (заголовки, прокси и тд)
- Отслеживание перфоманса запросов. Какие-то тулы уже умеют в парсинг запросов, но скорее всего вам нужно будет писать свои костыли
- Версионирование. Довольно большая проблема с back-compatibility изменениями моделей - эт боль. GraphQL придерживается "эволюционного" подхода с помечанием полей как deprecated, но если связи/изменения обширны - это превращается в ад. Ну и если вы изначально плохо спроектировали АПИ - вам пиздец. Но это и к restApi относится.
- Security. Природа GraphQL подразумевает provisioning = клиент знает и может посмотреть все доступные методы/модели. С одной стороны плюс (тот же сваггер можно пользовать для реста), но выставлять весь апи, простите - ГОЛОЙ ЖОПОЙ во внешку... ну так себе идея. Вот ребята во втором докладе костыли впилили, посмотрите - интересно. Если у вас открытй API, будьте готовы, что злоумышленники изнасилуют вас всеми возможными способами и с большой вероятностью найдут граф, который вызовет отказ в обслуживании, чем ёбнут вам весь сервер. Ну т.е. за этим реально следить нужно.
- Опытность команды. Нужно понимание ВСЕМИ в командах/стримах как это работает и вообще идеологию GraphQL, иначе у вас там ТАКАЯ КАША будет, что все профиты от технологии быстро нивелируются.
Но фейсбук живёт с этим как-то, как и нетфликсы всякие, но где мы все и где эти все фаанги.
В общем, шансов стрельнуть себе в ногу с GraphQL реально много, но инструмент, безусловно, интересный. Если у вас есть опыт работы с ним - пишите в комментах, интересно почитать.
Всем хороших выходных!⌨️
https://www.youtube.com/watch?v=YgRmgHPTXr4 - доклад 2017-ого, но по прежнему актуален, докладчик очень живой и сама презентация хороша с примерами на Java.
https://www.youtube.com/watch?v=3fHKySh07ow - доклад с HighLoad конфы (этого года), где пацаны рассказывают как переводили Яндекс.Афишу (+кинопоиск) на GraphQL - он уже чуть более сложный (но в рамках), скорее для мидлов/помидоров.
Оба примерно по часу
У меня сейчас проект на GraphQL. Что я могу сказать - интересная технология, но её нужно правильно готовить. Уже собрано прилично граблей и костылей.
Одни проблемы REST Api она решает :
- больше контроля над схемой
- "клиентам" проще создавать чуть более гибкие запросы при надобности
- уменьшает кол-во передаваемых данных по сети (клиентам-мобилкам зайдёт)
Но как по мне бОльше проблем создаёт :
- Проблема с N+1. Это когда у вас вместо батч запросов, двиг графа бегает в базу за каждой энтитей (тут есть решение, но он тоже компромиссное если у вас serverless - DataLoader)
- Кеширование. GraphQL строится ПОВЕРХ http и у вас все запросы бегут по одному урлу - невозможно использовать стандартные механизмы http кеширования (заголовки, прокси и тд)
- Отслеживание перфоманса запросов. Какие-то тулы уже умеют в парсинг запросов, но скорее всего вам нужно будет писать свои костыли
- Версионирование. Довольно большая проблема с back-compatibility изменениями моделей - эт боль. GraphQL придерживается "эволюционного" подхода с помечанием полей как deprecated, но если связи/изменения обширны - это превращается в ад. Ну и если вы изначально плохо спроектировали АПИ - вам пиздец. Но это и к restApi относится.
- Security. Природа GraphQL подразумевает provisioning = клиент знает и может посмотреть все доступные методы/модели. С одной стороны плюс (тот же сваггер можно пользовать для реста), но выставлять весь апи, простите - ГОЛОЙ ЖОПОЙ во внешку... ну так себе идея. Вот ребята во втором докладе костыли впилили, посмотрите - интересно. Если у вас открытй API, будьте готовы, что злоумышленники изнасилуют вас всеми возможными способами и с большой вероятностью найдут граф, который вызовет отказ в обслуживании, чем ёбнут вам весь сервер. Ну т.е. за этим реально следить нужно.
- Опытность команды. Нужно понимание ВСЕМИ в командах/стримах как это работает и вообще идеологию GraphQL, иначе у вас там ТАКАЯ КАША будет, что все профиты от технологии быстро нивелируются.
Но фейсбук живёт с этим как-то, как и нетфликсы всякие, но где мы все и где эти все фаанги.
В общем, шансов стрельнуть себе в ногу с GraphQL реально много, но инструмент, безусловно, интересный. Если у вас есть опыт работы с ним - пишите в комментах, интересно почитать.
Всем хороших выходных!
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Владимир Цукур — GraphQL — API по-новому
Подробнее о Java-конференциях:
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
. . . . За последнее десятилетие REST-образные API стали стандартом де-факто. Но всегда ли это правильный выбор?
Facebook, GitHub и Pinterest…
— весной — JPoint: https://jrg.su/gTrwHx
— осенью — Joker: https://jrg.su/h7yvG4
— —
. . . . За последнее десятилетие REST-образные API стали стандартом де-факто. Но всегда ли это правильный выбор?
Facebook, GitHub и Pinterest…
🔥6👍5❤🔥1🤔1
Давайте поговорим про JWT 😕
Залетел мне тут от друга вопрос - зачем нужен refresh_token в JWT? И что вообще такое это ваше ДЖЭВЭТЭ, блэт???
О JWT чуть ниже, а ответ на первый вопрос казалось бы лежит на поверхности - "Ну эээээ, чтобы забрать новый access_token". Ответ верный, да только ясности не добавляет зачем хромому костыль, ведь можно просто ... скажем хранить access_token с каким-то там expiration и проверять каждый раз. Да?
Нет.
Я пятнадцать лет гребу, а пришлось три часа убить чтобы раскопать этот вопрос. Стыд и срам, конечно, но что поделать. Реально очень смешно, что какую статью не начни читать - там 100500 мнений зачем КОНЦЕПТУАЛЬНО нужен refresh_token. Разбираемся😊
И так, JWT (Читается кстати не ДЖИВИТИ и не ДЖЕЙ ДАБЛВИ ТИ, а ДЖОТ!) - Json Web Tokens стандарт бла бла бла. В википедии сходите почитайте!
Если короче - это такой хитрый джсончик, который состоит из хедера, body и подписи. И нужен для того чтобы гонять его с сервера в браузер и обратно. Для аутентификации запроса пользователя.
Как это работает. На пальцах.
Смотрите, вот логинится пользователь на сайте. Вводит логин и пароль. Мы бежим в базу, проверяем что да, такой пользователь и правда валяется, а ... что дальше? Ведь чтобы получить доступ к личному кабинету и API личного кабинета на сайте ... нужны эти логин и пароль. Мы же не можем просто сделать редирект и дальше не проверять запросы, ведь нам важно понять в КАЖДОМ запросе - а этот ли пользователь его шлёт? Или другой? А какой конкретно?
Поэтому. Мы можем сохранить логин и пароль пользователя и передавать его при каждом запросе к API. Звучит хорошо, не правда ли? Но нет. Это чревато тем, что очень не хотелось бы гонять такие важные данные как пароль и логин каждые пару секунд пользования сайтом. Так не носят. И браузер ваш взломать могут и трафик перехватить и чё только не могут.
Поэтому2. Мы на сервере генерируем JWT токен, засовываем в него айди пользователя и ... подписываем получившийся JSON'чик секретным ключом, предварительно сгенерировав его и положив в какой-нибудь конфиг на сервере. В итоге, наш JWT состоит из Header'а с деталями алгоритма, из "тела" с айдишкой пользователя и каким-то хэшем на конце (подпись). Вот тут можно поиграться и посмотреть на структуру : https://jwt.io/
Важно понимать, что сам токен может быть прочитан КЕМ УГОДНО, т.к. все эти данные - открытые, не шифрованные (именно поэтому в JWT никогда нельзя засовывать sensitive data без предварительной шифровки). Но я же могу подменить тот самый ID и тем самым подменить пользователя - скажете вы. Но нет. Не можете. Для этого вы поменяете Body, а вот ХЭШ, который находится в конце - не сможете, т.к. не знаете секретного ключа сервера. В отличии от самого сервера, который может получить такой токен и проверить, что Body подписан правильно (применив свой секретный ключ и сравнив с "хвостом" токена).
Круто, разобрались немного. Так вот, вы логинитесь. И отдаёте в браузер такой вот JWT токен, который сможете чуть позже проверить. Круто? Круто. Теперь у вас между браузером и сервером постоянно бегает cookie с этим токеном, вы каждый раз проверяете её и всё отлично. Но ... если эту куку перехватит злоумышленник - он ведь сможет воспользоваться ей чтобы выдать себя за пользователя, верно? Верно. Злоумышленник не узнает логин и пароль, но сможет "прикинуться вами". Чё делать?
На сцену выходят access и refresh токены!
Смысл их в том, что при помощи них мы сможем понять - а не пора ли нам снова закинуть пользователя на логин страничку?А так же не позволить злоумышленнику выдать себя за нас. Но зачем оба?
(Вообще, я тут конечно немного помиксал Oauth и JWT, т.к. первый как раз и использует токены, а второй самодостаточный, однако вместе они друг друга дополняют... не забивайте голову).
⬇️Продолжение чуть ниже⬇️
Нахера вам эти access_token и refresh_token и как это всё работает?
Залетел мне тут от друга вопрос - зачем нужен refresh_token в JWT? И что вообще такое это ваше ДЖЭВЭТЭ, блэт???
О JWT чуть ниже, а ответ на первый вопрос казалось бы лежит на поверхности - "Ну эээээ, чтобы забрать новый access_token". Ответ верный, да только ясности не добавляет зачем хромому костыль, ведь можно просто ... скажем хранить access_token с каким-то там expiration и проверять каждый раз. Да?
Нет.
Я пятнадцать лет гребу, а пришлось три часа убить чтобы раскопать этот вопрос. Стыд и срам, конечно, но что поделать. Реально очень смешно, что какую статью не начни читать - там 100500 мнений зачем КОНЦЕПТУАЛЬНО нужен refresh_token. Разбираемся
И так, JWT (Читается кстати не ДЖИВИТИ и не ДЖЕЙ ДАБЛВИ ТИ, а ДЖОТ!) - Json Web Tokens стандарт бла бла бла. В википедии сходите почитайте!
Если короче - это такой хитрый джсончик, который состоит из хедера, body и подписи. И нужен для того чтобы гонять его с сервера в браузер и обратно. Для аутентификации запроса пользователя.
Как это работает. На пальцах.
Смотрите, вот логинится пользователь на сайте. Вводит логин и пароль. Мы бежим в базу, проверяем что да, такой пользователь и правда валяется, а ... что дальше? Ведь чтобы получить доступ к личному кабинету и API личного кабинета на сайте ... нужны эти логин и пароль. Мы же не можем просто сделать редирект и дальше не проверять запросы, ведь нам важно понять в КАЖДОМ запросе - а этот ли пользователь его шлёт? Или другой? А какой конкретно?
Поэтому. Мы можем сохранить логин и пароль пользователя и передавать его при каждом запросе к API. Звучит хорошо, не правда ли? Но нет. Это чревато тем, что очень не хотелось бы гонять такие важные данные как пароль и логин каждые пару секунд пользования сайтом. Так не носят. И браузер ваш взломать могут и трафик перехватить и чё только не могут.
Поэтому2. Мы на сервере генерируем JWT токен, засовываем в него айди пользователя и ... подписываем получившийся JSON'чик секретным ключом, предварительно сгенерировав его и положив в какой-нибудь конфиг на сервере. В итоге, наш JWT состоит из Header'а с деталями алгоритма, из "тела" с айдишкой пользователя и каким-то хэшем на конце (подпись). Вот тут можно поиграться и посмотреть на структуру : https://jwt.io/
Важно понимать, что сам токен может быть прочитан КЕМ УГОДНО, т.к. все эти данные - открытые, не шифрованные (именно поэтому в JWT никогда нельзя засовывать sensitive data без предварительной шифровки). Но я же могу подменить тот самый ID и тем самым подменить пользователя - скажете вы. Но нет. Не можете. Для этого вы поменяете Body, а вот ХЭШ, который находится в конце - не сможете, т.к. не знаете секретного ключа сервера. В отличии от самого сервера, который может получить такой токен и проверить, что Body подписан правильно (применив свой секретный ключ и сравнив с "хвостом" токена).
Круто, разобрались немного. Так вот, вы логинитесь. И отдаёте в браузер такой вот JWT токен, который сможете чуть позже проверить. Круто? Круто. Теперь у вас между браузером и сервером постоянно бегает cookie с этим токеном, вы каждый раз проверяете её и всё отлично. Но ... если эту куку перехватит злоумышленник - он ведь сможет воспользоваться ей чтобы выдать себя за пользователя, верно? Верно. Злоумышленник не узнает логин и пароль, но сможет "прикинуться вами". Чё делать?
На сцену выходят access и refresh токены!
Смысл их в том, что при помощи них мы сможем понять - а не пора ли нам снова закинуть пользователя на логин страничку?А так же не позволить злоумышленнику выдать себя за нас. Но зачем оба?
(Вообще, я тут конечно немного помиксал Oauth и JWT, т.к. первый как раз и использует токены, а второй самодостаточный, однако вместе они друг друга дополняют... не забивайте голову).
⬇️Продолжение чуть ниже⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍4❤🔥1😍1
⬆️Начало выше⬆️
access_token - это такой токен, который мы можем проверить, что он был подписан секретным ключом сервера (см. Асимметричное шифрование, я делал пост о том как оно работает). Вообще.. это ровно то, что делает JWT токен сам по себе, так что наш JWT и будет сам по себе являться уже Access_token'ом. Но просто знайте, что в мире Oauth вы можете и сами "скрафтить" всё то же самое, просто JWT это стандарт. Обычно, "живучесть" этого токена небольшая. Именно это свойство позволяет гарантировать, что даже если злоумышленник украдёт его - "доступа к апи" у него останется на n минут, если он вообще сможет вовремя им воспользоваться. +у него не будет ни пароля ни логина. Идеально! Вне мира JWT, это вполне может быть "Bearer {access_token}", что часто и бывает.
refresh_token - а этот токен нужен для того чтобы когда истёк access_token, мы сбегали на сервер и взяли новую пару "access+refresh". Срок протухания этого токена уже может быть и день и десять и месяц - зависит от бизнеса.
В чём соль-то?
Трюк тут в том, что получив при логине эту пару токенов вы
а) Сохраняете refresh_token на сервере и привязываете к пользователю.
б) Зашиваете refresh_token в ПАМЯТЬ (если у вас SPA приложение), или в Local Storage (он не передаётся на сервер с каждым запросом) или как вариант - ставите куку с ограничением, что слаться она может только по урлу запроса новой пары токенов. Суть в том, что этот токен НЕ БЕГАЕТ в разные API, он ждёт своего часа, а именно - когда протухнет access_token.
в) Все запросы из браузера теперь бегают с access_token (в нашем случае с JWT). В JWT "зашиваем" expiration_date. Как только мы понимаем, что JWT "протух", сразу же кидаем 403 (Forbidden) и клиент бежит за новой парой токенов. А этот уже становится невалидным.
г) Как только клиент (браузер) получает 403, он сразу же копается у себя в памяти/куке, достаёт сохранённый refresh_token, бежит на какой-нибудь /authenticate_token, где сервер валидирует JWT токен, достаёт оттуд юзера, смотрит в базу (или кэш), сопоставляет с присланным refresh_token (а так же проверяем не стух ли refresh) и если всё совпадает - прекрасно! Выдаём клиенту обновлённый. Если рефреш стух или мы отозвали все токены из базы (просто удалив), то кидаем клиенту допустим ошибку 401 (Not Authorized) и клиент уже понимает - всё, тут уже без странички логина не обойтись.
Фух. Объяснил на пальцах, так объяснил. Ну... как есть, ребят🙃
В общем, JWT нужен для "подписи" данных, чтобы быть уверенным, что браузер не подменил инфу, которую мы "вшиваем" в json и гоняем между сервером и клиентом, а токены - для того чтобы злой дядя не воспользовался этим JWT и не представился вами. Всё просто😊
Спасибо за внимание и лайк не забудь😁
access_token - это такой токен, который мы можем проверить, что он был подписан секретным ключом сервера (см. Асимметричное шифрование, я делал пост о том как оно работает). Вообще.. это ровно то, что делает JWT токен сам по себе, так что наш JWT и будет сам по себе являться уже Access_token'ом. Но просто знайте, что в мире Oauth вы можете и сами "скрафтить" всё то же самое, просто JWT это стандарт. Обычно, "живучесть" этого токена небольшая. Именно это свойство позволяет гарантировать, что даже если злоумышленник украдёт его - "доступа к апи" у него останется на n минут, если он вообще сможет вовремя им воспользоваться. +у него не будет ни пароля ни логина. Идеально! Вне мира JWT, это вполне может быть "Bearer {access_token}", что часто и бывает.
refresh_token - а этот токен нужен для того чтобы когда истёк access_token, мы сбегали на сервер и взяли новую пару "access+refresh". Срок протухания этого токена уже может быть и день и десять и месяц - зависит от бизнеса.
В чём соль-то?
Трюк тут в том, что получив при логине эту пару токенов вы
а) Сохраняете refresh_token на сервере и привязываете к пользователю.
б) Зашиваете refresh_token в ПАМЯТЬ (если у вас SPA приложение), или в Local Storage (он не передаётся на сервер с каждым запросом) или как вариант - ставите куку с ограничением, что слаться она может только по урлу запроса новой пары токенов. Суть в том, что этот токен НЕ БЕГАЕТ в разные API, он ждёт своего часа, а именно - когда протухнет access_token.
в) Все запросы из браузера теперь бегают с access_token (в нашем случае с JWT). В JWT "зашиваем" expiration_date. Как только мы понимаем, что JWT "протух", сразу же кидаем 403 (Forbidden) и клиент бежит за новой парой токенов. А этот уже становится невалидным.
г) Как только клиент (браузер) получает 403, он сразу же копается у себя в памяти/куке, достаёт сохранённый refresh_token, бежит на какой-нибудь /authenticate_token, где сервер валидирует JWT токен, достаёт оттуд юзера, смотрит в базу (или кэш), сопоставляет с присланным refresh_token (а так же проверяем не стух ли refresh) и если всё совпадает - прекрасно! Выдаём клиенту обновлённый. Если рефреш стух или мы отозвали все токены из базы (просто удалив), то кидаем клиенту допустим ошибку 401 (Not Authorized) и клиент уже понимает - всё, тут уже без странички логина не обойтись.
Фух. Объяснил на пальцах, так объяснил. Ну... как есть, ребят
В общем, JWT нужен для "подписи" данных, чтобы быть уверенным, что браузер не подменил инфу, которую мы "вшиваем" в json и гоняем между сервером и клиентом, а токены - для того чтобы злой дядя не воспользовался этим JWT и не представился вами. Всё просто
Спасибо за внимание и лайк не забудь
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Айтигребец
🔐 Что такое SSL/TLS и как он работает? И немного про асимметричное шифрование на пальцах.
Друг тут на днях провёл ликбез и расставил точки над i на эту тему (были определенные чёрные дыры в понимании), за что ему большое спасибо ^^ Делюсь закаточкой с вами.…
Друг тут на днях провёл ликбез и расставил точки над i на эту тему (были определенные чёрные дыры в понимании), за что ему большое спасибо ^^ Делюсь закаточкой с вами.…
👍29🔥10❤7
Пашка Дуров запилил сторисы для каналов. Зачем - вопрос хороший, конечно, но пусть на него другие отвечают. Мне интересно другое. Чтобы включить у себя такую возможность - канал нужно "забустить". А делать это могут только подписчики с прем аккаунтами. Я вам тут по пальцам своей руки пересчитал, всего 28/310 с премом (ну.. если считать тех, у кого в никнейме в конце эмоджи есть).
Забавно, что чуть больше года назад я считал и среди вас было всего 1.9% с премом, а сейчас аж 9! (хороший рост у канала кстати, всего минус 7 человек за год
Так вот это. Давайте вы мне буст (я просто ачивки люблю, так-то и даром не нужно), а я вам смешную сторис из своего опыта вспомню.
Вам нужно обновить телегу до последней версии и жмякнуть "Boost" под этим постом. Ну или перейти по этой ссылке : https://news.1rj.ru/str/ITrower?boost
Upd : первого уровня достигли ❤️ сторис запилен
Upd2 : и второго!
Upd3: до 4-ого бустанули. Аще вы люди-коты, конечно. Пасямбр!
Диди Мадлоба, Генацвале!
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Айтигребец
Телеграм недавно выкатил премиум подписку.
Давно ждал, если честно, так как пользуюсь им уже лет 8 и весьма доволен функционалом/юзабилити. Несмотря на то, что "плюшки" премиума могли бы и поинтереснее быть, но не суть - лично я с удовольствием купил в знак…
Давно ждал, если честно, так как пользуюсь им уже лет 8 и весьма доволен функционалом/юзабилити. Несмотря на то, что "плюшки" премиума могли бы и поинтереснее быть, но не суть - лично я с удовольствием купил в знак…
👍7🤩3⚡2❤1❤🔥1👌1
ChatGPT добавила функцию распознавания изображений 😤
Это означает, что теперь можно загружать изображения и запрашивать его о том, что на них изображено.
Результат можно увидеть на скриншотах.
Ух, впечатляет-с ❤️ И пугает немношк🫣
Это означает, что теперь можно загружать изображения и запрашивать его о том, что на них изображено.
Результат можно увидеть на скриншотах.
Ух, впечатляет-с ❤️ И пугает немношк
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥2🤯2❤🔥1🤣1
Поигрались и чатгптятебенахераденегстолькоплачучтобытымненедавалсобойпользоватьсяпидор хватит.
Все претензии к мату на второй пикче можете адресовать моему юристу с третьей.
Доброй ночи, гребцы😁
Все претензии к мату на второй пикче можете адресовать моему юристу с третьей.
Доброй ночи, гребцы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚6😁4🤣3