• Как реализовать авторизацию/аутентификацию с помощью access/refresh tokens с использованием JWT?

    nowm
    @nowm
    3. Оба ли эти токены будут являться JWT?

    JWT — это строка, сформированная в соответствие с RFC7519. Если формат правильный, это JWT, если нет — это не JWT. Если вы распечатаете JWT-токен на бумаге и используете её как кулёк для семечек, эти токены не перестанут быть JWT-токенами. То есть, область применения никак не влияет на то, JWT это или нет — только формат самого токена.

    ---

    Суть Access- и Refresh-токенов в том, что у вас может быть 10 разных серверов, один из которых используется для авторизации. На сервере авторизации вы генерируете токены и сообщаете их клиенту, каким-то способом, безопасность и удобство которого вас устраивает. Кто-то в куках передаёт, кто-то прямыми ответами сервера. Остальные 9 серверов принимают запросы, в которых указаны Access-токены. Тут тоже можно разными способами это делать. Можно в GET-параметрах токен передавать, можно в куках, можно в теле запроса, можно использовать хэдер Authorization — опять же, это на ваше усмотрение, в зависимости от того, какой способ вам кажется более удобным или более безопасным. На этих 9 серверах есть открытые ключи авторизационного сервера либо они могут обратиться к авторизационному серверу за ними. Используя эти открытые ключи, они проверяют Access-токен на валиднось, и если всё хорошо, выполняют запрос, в котором был этот токен, вытаскивая из токена, например, идентификатор текущего пользователя и используя его дальше. Сами эти 9 серверов не занимаются генерацией токенов вообще. Они только проверяют их. Соответственно, им не требуется хранить в БД или в кэше конкретные токены, чтобы удостоверяться в легитимности запроса, им нужен только открытый ключ авторизационного сервера, закрытой частью которого он подписывает эти токены. Это упрощает на их стороне логику, и они могут сосредоточиться на своих узких задачах.

    Авторизационный сервер занимается только генерацией токенов. Именно он решает, что, например, Access-токен должен жить 3 минуты, а Refresh-токен — 30 дней. Он делает свои личные проверки любых данных, которые может достать (IP, UA, идентификатор сессии и так далее) — вы сами решаете и сами пишете логику того, какие проверки нужно делать и как. Если вы считаете, что в полнолуние нужно отказывать в генерации токена для браузера Firefox пользователям из Кении, именно так и программируйте систему, потому что за вас библиотека JWT автоматом такие проверки делать не будет — это не её назначение. Её назначение проверять и создавать JWT-токены из данных, которые вы ей даёте на входе. Среди этих данных могут быть идентификаторы пользователя, сессии и т.п., если вы сами захотели их туда засунуть.

    Когда вы запрашиваете новый Access-токен, передавая в параметрах Refresh-токен (опять же, передавать его можно разными способами в зависимости от ваших вкусов и того, как вы запрограммировали сервер), авторизационный сервер проверяет его валидность и принимает решение, выдавать новый токен или нет. Вполне можно построить систему так, чтобы Refresh-токен не приходилось хранить в БД на стороне сервера авторизации, потому что все нужные данные можно поместить прямо в payload токена — он всё равно подписывается, так что если клиент подменит там идентификатор пользователя, токен не пройдёт валидацию.

    Фишка с Access- и Refresh-токенами нужна для того, чтобы организовать распределённую работу нескольких серверов. Если вы генерируете токены на сервере, а потом на этом же сервере принимаете запросы, в которых используется Access-токен, вы делаете что-то неправильно, потому что в таких ситуациях городить подобную архитектуру не нужно, и передавать Refresh-токен вместе с Access-токеном API-серверу тоже не нужно, потому что генерация новых токенов — это не его забота.

    Немного выше я писал, что токены со стороны клиента можно передавать по-разному в зависимости от предпочтений: в куках, в GET-параметрах, в теле запроса или в хэдере Authorization. Хорошая практика — это когда вы передаёте их в хэдере Authorization и больше никак. Делаете запрос к API-серверу? В хэдер помещается Access-токен. Делаете запрос на продление токена к авторизационному серверу? В хэдер помещается Refresh-токен. Всё просто и однотипно.
    Ответ написан
    1 комментарий
  • Как оповестить создателя о начале работы модератора?

    nowm
    @nowm
    Ваши вопросы, скорее всего, удаляют из-за того, что они не конкретные. Вы не пытались самостотельно ничего делать, не натолкнулись в процессе на ошибку, которую не знаете как пофиксить. Вместо этого вы говорите, что у вас есть непонятные функции /work start и /work stop (у вопроса тег «Java», но такие функции в нём синтаксис не позволит создать, значит речь о чём-то другом, а не о Java).

    Дальше, непонятно, кто такая администрация, кто такие модераторы и кто создатель. Такая информация зашивается в ваш плагин или хранится в какой-то базе данных?

    Что значит «оповестить создателя»? Написать ему сообщение в Телеграме, отправить письмо на электропочту, показать всплывающее окошко на сайте или в реальной жизни передать записку?

    И ещё куча таких вопросов. Все они возникают из-за того, что вы не конкретизируете вопрос, надеясь что у всех работает телепатия и они могут узнать детали из ваших мыслей.
    Ответ написан
    1 комментарий
  • На чём написан язык программирования C?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Учтите, что язык программирования - это просто набор спецификаций и правил. Он написан на английском языке.

    Если же вас интересует на чем запрограммированы компиляторы языка С, то самые популярные нынче развивающиеся компиляторы написаны на C и C++ соответственно:
    gcc: https://github.com/gcc-mirror/gcc
    clang: https://github.com/llvm/llvm-project/tree/main/clang

    Вы спросите, а как компилятор языка Си написали на самом Си? Ответ прост - первые компиляторы были написаны на ассемблере. Они были очень простыми и тупыми, возможно не умели понимать все тонкости языка. Когда появился достаточно работающий компилятор с минимальным набором функций, можно было переписать его на Cи и скомпилировать первым компилятором. После этого стало можно компилировать компилятор на Си самим собой.

    Точно также в компиляторы добавляют новые возможности языка - реализуют код компиляции этих вещей без их использования в исходниках и получают компилятор, который умеет их компилировать. Потом можно исходный код компилятора переписать с использованием этих новых функций, используя полученный ранее исполняемый файл компилятора.

    А так, наверно, есть куча неподдерживаемых устаревших компиляторов Си на всевозможных языках.
    Ответ написан
    2 комментария
  • Как выучить javaScript для бекенда?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.
    Яваскрипт нужен только для яваскрипт бэкенда.
    На вакансию РНР разработчика нужно знание РНР.

    Путь дальше очень простй - перестать создавать под этим и другими аккаунтами однообразные топики на тему "Страдания юного Вертера" и продолжать грызть РНР, раз уж начали.
    Ответ написан
    2 комментария
  • Что означает "!!~"?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Сокращалка, удобная для indexOf(), который возвращает -1 если не найдено, или индекс от 0 и больше.

    Для логики приложения часто бывает нужно узнать только, найдено или нет: т.е. -1 или иное значение. Можно просто сравнивать if (a.indexOf(b) > -1) { /* найдено! */ } но иногда хочется короче.

    Битовый оператор НЕ ~ хорош тем, что выделяет -1: только -1 с этим оператором даст 0. Прочие числа дадут какое-то ненулевое значение.

    ~(-1) === 0

    Остаётся привести значение из численного в булево. Для этого два воскл. знака — два логических НЕ.
    • для варианта «найдено» из числа от 0 и больше получилось тоже ненулевое число, и !! даст true
    • для варианта «не найдено» из -1 получится уникальный 0, и !!0 вернёт false
    Ответ написан
    4 комментария
  • Что нужно уточнить на собеседовании?

    opium
    @opium
    Просто люблю качественно работать
    Спрашивай то что тебя интересует, если тебя ничего особо не интересует самого, то просто или рабочий, зачем узнавать вещи которые интересны каким то чувакам с хабра и абсолютно тебе не нужны
    Ответ написан
    Комментировать
  • Что нужно уточнить на собеседовании?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Не зажимайтесь. Спрашивайте все что вам нужно. Вам ответят максимально адекватно.
    В конце концов представьте что это ваша жена и вы задаете вопросы
    Ответ написан
    3 комментария
  • Импорт "react-router-dom" происходит не из правильного места, что сделать?

    Импорт "происходит" во время сборки проекта. Если вы пытаетесь определить откуда импортируется модуль по картинке, не советую это делать.
    Если у вас какието проблемы во время сборки, смотрите настройки webpack конфиг
    Если вам браузер неправильно подсвечивает какой то синтаксис, обращайтесь в поддержку JetBrains она у них достаточно адекватная.
    Ответ написан
    2 комментария
  • Стоит ли уволняться для поиска работы java разработчиком?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Все адекватные работодатели:

    1. Задают вопрос "когда вы готовы приступить к обязанностям", и 2 недели по КЗОТ это вообще минимальный стандарт. А так могут и месяц подождать, вполне адекватно отнесясь к тому, что после увольнения вы хотите взять небольшой отпуск, например. Но это вполне обговариваемо с работодателем.

    2. ищут сотрудника не на день и не на два, а на продолжительное время, и подождать сотрудника - не проблема. Тем более, что подготовить рабочее место для нового сотрудника - это тоже время, а в крупных ентерпрайзов это может занять и месяц и больше.

    3. Успешное прохождение интервью это еще не означает хороший оффер. Вам может не понравиться компания, не понравятся условия или ЗП или начальник с которым вы собеседуетесь. Не нужно думать что если пошел на собеседование то это точка невозврата. Точка невозврата это даже не подтверждение оффера. Даже увольнение еще можно откатить в некоторых случаях. Нет смысла волноваться по таким поводам.

    4. Многие ходят на собеседование даже не предполагая менять работу. Кто-то из спортивного интереса, кто-то на всякий случай посмотреть, а вдруг предложат работу мечты. В таких случаях всегда бывает, что сотрудника нужно ждать и месяц и два. Но такие варианты, конечно, встречаются в основном на уровне mid/senior и выше.
    Ответ написан
    Комментировать
  • Стоит ли уволняться для поиска работы java разработчиком?

    Jacen11
    @Jacen11
    вот скажи, зачем тебе мнение хрен пойми кого, если ты можешь сам пройти собеседования и все узнать? сейчас даже идти никуда не нужно, все удаленно проходит. Сразу отпадут все вопросы после первых же собесов, поймешь что спрашивают, что им нужно, на что смотрят и тд. На эти темы можно писать целые статьи и в общем то пишут, тут никто детально все равно расписывать не будет. Или ты думаешь что тебя укусят на собесах? В питере много вакансий, ты никогда не сможешь на все сходить чисто физически, можно пробовать сколько угодно
    Ответ написан
    Комментировать
  • Есть ли смысл искать frontend-работу в РФ с разговорным английским?

    DevMan
    @DevMan
    эмм.... нужно искать любую работу.
    сможете в РФ? отлично.
    сможете за бугром? ещё лучше.

    только как одно отменяет другое?
    судя по вопросу: вы в раздумиях, вместо, собственно, поиска.
    и это - фейл!
    Ответ написан
    Комментировать
  • Можно ли заставить Prettier ставить запятые в интерфейсах Typescript?

    Aetae
    @Aetae Куратор тега TypeScript
    Тлен
    В чистом prettier - нет. В нём специально ограничен функционал, чтоб кашу не получить.

    P.S. Не понимаю я таких как ты удаляторов. Шанс получить косяк типа:
    console.log('some')
    
    
    // iterate
    [1, 2, 3].forEach(func)
    вообще не стоит экономии на спичках.
    Ответ написан
    Комментировать
  • Какой взять ноутбук студенту для дальнейшей работы в промышленном дизайне?

    @evgeniy_lm
    встал вопрос о покупке ноутбука для для работы с 3D графикой

    Увы, ноутбука для для работы с 3D графикой, не существует

    Поскольку в железе и программах я не разбираюсь,

    А я разбираюсь.

    Из пожеланий только то, что не очень хочется таскать с собой здоровую игровую бандуру.

    А игровых ноутов не существует, все это стационарноя попса стилизованая под ноут. Так что ни кто подобную хрень не таскает

    Также интересует, имет ли смысл брать MakBook Air 13 или MakBook Pro 2020 года?

    Ну если вы профи то ходить на призентации с Макбуком не помешает, это подчеркнет вашу крутость. Наличие Макбука у студента подчеркнет его лоховатость.

    Что касается сути вопроса то с 3D графикой нужно работать на хорошем стацианарном компе с хорошим процессором и видеокартой, с монитором не менее 27" (а может и двумя). Для учебы стоит присмотреть дешовый, легкий ноут, возможно даже б/у, который в случае если вы его разобьете, потеряете или его украдут не сильно будет обидно и дасадно
    Ответ написан
    Комментировать
  • Как раньше люди программировали?

    @odissey_nemo
    Программист, ГИС-системы, растры, космоснимки
    Раньше было на порядок больше дела, на два порядка меньше банков, рекламы, посредников, пробок, конкурентов, владельцев средств производства и инвесторов.
    Совсем не было менеджеров. А были руководители (часто от бога), собаку съевшие на деле, которым занимались. Некоторых помним и сегодня, спусти 30 лет после их смерти. Придут ли сегодняшние программеры на могилку своего текущего тим-лида через 30 лет? ответ очевиден.
    Отсюда и задачи стояли более интересные, разнообразные, ответственные. И ты мог заниматься ими десятки лет.
    Пригождался любой человек, а не только юные гении, знающий все вопросы на собеседовании. Но не способные связать двух слов с товарищами или посоветовать что-то.
    Вероятность получить в ответ на твой произвольный вопрос фразу: "Я занят, некогда мне с тобой" была исчезающе мала.
    Больше времени люди проводили в обсуждениях совместных и мероприятиях вне работы (и отпуска проводили вместе). Мало, очень мало было личных проектов.
    Работало много институтов. создающих свои машины, свои операционки, свои языки программирования.
    И достигали реально многого. Уважали друг друга.
    Уволить тебя, если ты не был откровенным тунеядцем. было невозможно.

    В целом, работать было на порядок интереснее. И задачи стояли на порядок важнее и реальнее Как в программировании, так и в материальном производстве.
    Ответ написан
    Комментировать
  • Кто-нибудь знает хорошие онлайн-курсы по Питону с нуля?

    @mkone112
    Начинающий питонист.
    618229092f4cb037352899.png
    Ответ написан
    Комментировать
  • Кто-нибудь знает хорошие онлайн-курсы по Питону с нуля?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Либо человек способен учиться по учебникам, либо не способен быть программистом.
    Ответ написан
    Комментировать
  • Имеются ли какие нибудь уроки по C# NET FRAMEWORK?

    GavriKos
    @GavriKos
    MSDN
    Ответ написан
    Комментировать
  • Ценится ли диплом о профессиональной переподготовке?

    @generalx
    Системный администратор
    Сертификаты от микротика и циски выше чем этот диплом
    Ответ написан
    4 комментария
  • Ценится ли диплом о профессиональной переподготовке?

    Slayer_nn
    @Slayer_nn
    Гугол, памаги!
    Ценятся знания и опыт. И только.
    Ответ написан
    Комментировать
  • Стратегия развития, реалистично?

    Zoominger
    @Zoominger
    System Integrator
    есть мысль перепрофилироваться в гейм дев. Слава богу уверенный пользователь 3Д макса

    Есть мысль стать хирургом. Слава Б-гу, я уверенно могу нарезать колбаску.

    Разместить везде где только возможно и постараться привлечь деньги на разработку.

    Дядька вроде взрослый, а мышление инфантильное, детское. Где будете размещать? К кому обратитесь за деньгами?

    Получить инвестиции, собрать команду, сделать качественный продукт, продаться Майкрософту :)

    Как будете собирать? Есть ли у вас опыт собеседования и отбора персонала?

    Максимально пригодную к использованию альфу.

    Которая так и останется альфой. Видел с десяток игр, отличных, прекрасно реализованных, которые так и умерли, потому что даже 10$ никто не задонатил.

    Изучить основы движка + СС+

    Какие основы? Когда планируете остановиться?

    Короче, не взлетит.
    Ответ написан
    2 комментария