• Как реализовать регистрацию в RESTful приложении?

    r0zh0k
    @r0zh0k
    Site Reliability Engineer
    Регистрация:
    POST /api/signup, в тело запроса передается емейл/логин и пароль + нужные вам пользовательские данные. Сторите это дело в базу, пароль конечно же хешируете bcryptом.

    Логин:
    POST /api/login, в тело запроса передается логин и пароль. Достаете пользователя из базы, хешируете пароль, сравниваете с сохраненным. Если не ок – 401 до свидания, если ок:

    Генерируете JWT токен, в токен записываете логин и роли, ставите дату протухания. Токен обязательно подписывается HS256 или сильнее.
    Токен ставите в респонс в хидер X-Auth-Token или возвращаете в респонсе или еще как угодно. Кроме этого возвращаете на фронт его роли чтобы фронт знал что надо рисовать.

    Фронтенд сохраняет токен в печенье или локалсторедж и передает с каждым запросом.

    На каждый запрос вы
    1. Смотрите есть ли токен в хидере. Если нет – 403.
    2. Валидируете его (обязательно ставите сами алгоритм подписи, а не берете из самого токена), и смотрите не протух ли. Если невалидный или протух – 403.
    3. Достаете оттуда емейл и роли. Смотрите, доступен ли ваш эндпоинт этим ролям. Если нет – 403.
    4. ...
    5. PROFIT!

    Время от времени токен надо рефрешить. Еще можно в токен напимер записывать ІР пользователя и кучу другой полезной информации.

    Ключевые слова для гугления – JWT auth, даже не знаю что еще добавить.
    Ответ написан
    7 комментариев
  • Spring Security: Как разрешить доступ неавторизованным клиентам?

    r0zh0k
    @r0zh0k
    Site Reliability Engineer
    Пишете матчер на все и разрешаете его всем. Нужные эндпоинты – закрываете, например:
    @Override
        protected void configure(final HttpSecurity http) throws Exception {
            http
                .sessionManagement()
                    .sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                .csrf().disable()
                .exceptionHandling().and()
                .anonymous().and()
                .servletApi().and()
                .authorizeRequests()
                .antMatchers(HttpMethod.GET, "/api/**").permitAll()
                .antMatchers(HttpMethod.POST, "/api/**").permitAll()
                .anyRequest().authenticated().and()
                .addFilterBefore(
                        new AuthFilter(),
                        UsernamePasswordAuthenticationFilter.class
                );
        }
    Ответ написан
    Комментировать
  • Как правильно работать со сборкой JS проекта в GIT?

    r0zh0k
    @r0zh0k
    Site Reliability Engineer
    Зачем хранить билды в git? Выкладывайте их куда-нибудь.
    Ответ написан
    Комментировать
  • Как правильно настроить масштабируемый веб сервер на AWS?

    r0zh0k
    @r0zh0k
    Site Reliability Engineer
    1. Смысл использовать AWS есть. Но в первую очередь ваше приложение само должно быть масштабируемым – сервер должен быть stateless и не хранить никаких данных локально (в том числе пользовательские сессии), на AWS должен быть настроен ELB который будет распределять трафик между вашими инстансами. Если все упирается в базу данных – тогда для нее можно сделать read-реплики, например.

    2. T2 инстансы не умеют масштабироваться сами по себе. T2 это самые простые машинки, которые имеют ограничения по времени максимальной нагрузки на них – в терминах амазона это назвается CPU Credits. Cмысл в том, что вы можете давать нагрузку выше 20% (для разных типов этот порог разный) только в течение определенного времени (час, два, больше – опять же, для разных инстансов это время различается), после истечения которого ваш инстанс опустится до базовой производительности (то есть, довольно низкой).
    Короче говоря – T2 держит пики, но не держит длительную нагрузку.

    Для динамического масштабирования вы можете с помощью Cloudwatch ловить увеличение количества потребляемых ресурсов и давать команду ASG поднять еще инстансов (или опустить, если нагрузка упала). Можно делать то же самое используя свой собственный мониторинг и AWS API для управления облаком.
    Ответ написан
    Комментировать
  • Как подключиться к VPC от AWS amazon?

    r0zh0k
    @r0zh0k
    Site Reliability Engineer
    1. VPC как правило содержит публичные и приватные подсети. Посмотрите какие есть в вашей и где находятся инстансы к которым вы хотите подключиться.
    2. Если публичных подсетей нет, то вам нужно добавить таковую
    3. Для подключения к инстансам вам нужен ключ. Если ключа у вас нет и других способов подключения вы не настраивали (например, самостоятельно конфигурировали sshd на инстансе) – то к инстансу вы подключиться не сможете, даже если сможете его пингануть
    4. Если ваш инстанс находится в приватной подсети, вам нужно создать новый инстанс (пойдет самый простой t2.nano) в публичной подсети и настроить security groups для целевого инстанса чтобы был открыт доступ к нужым портам из публичной подсети
    5. Логинитесь на ваш свежесозданный инстанс и уже с него – на целевой.
    6. Если ваш целевой инстанс находится в публичной подсети – тогда у него есть публичный ІР адрес, к которому вы можете подключиться (нужно только настроить security group чтобы открыть порты для внешнего доступа)
    Ответ написан
    Комментировать
  • Amazon SES на бесплатном тарифе позволяет отправлять сообщения не подтверждённым email?

    r0zh0k
    @r0zh0k
    Site Reliability Engineer
    Верифицируйте домен и запросите увеличение лимита отправляемых писем – тогда вам не нужно будет делать верификацию каждого адреса и вы сможете отправлять письма в рамках Free Tier.

    Верификация адресов должна быть проведена для того чтобы вы имели адрес для отправки (отправлять можно только с верифицированного адреса) или тестировали рассылки в сендбоксе.
    Ответ написан
    Комментировать
  • Как посмотреть логи Docker?

    r0zh0k
    @r0zh0k
    Site Reliability Engineer
    AWS не пересобирает образ, AWS рестартует контейнер если тот завершился.
    Ваш контейнер скорее всего писал логи в stdout.
    Зайдите на инстанс по SSH, затем сделайте docker ps -a, там можно будет увидеть только что завершенный контейнер. Раньше AWS их оставлял, но сейчас, в связи с обновлением ECS-агента, судя по всему, он их подчищает, поэтому свой контейнер вы можете не увидеть.
    Если же старый контейнер еще остался то все равно можно посмотреть его логи – docker logs <container_id>

    Тем не менее, желательно прикрутить внешний сервис логирования, например LogEntries, Papertrail или другие подобные системы.
    Ответ написан
    Комментировать
  • Как обрабатывать код состояния "1" операции вывода денег с Яндекс.Денег на карту?

    r0zh0k
    @r0zh0k Автор вопроса
    Site Reliability Engineer
    Доку невнимательно прочитал. Выдержка
    Оператор обрабатывает полученный запрос немедленно. В случае если запрос невозможно обработать в течение нескольких секунд, возвращается ответ «в процессе обработки» (status=1). В этом случае результат операции неизвестен, и ИC следует повторить запрос с теми же данными для получения окончательного ответа. Рекомендуется следующий режим повтора: первый повтор через 1 минуту, следующие три с промежутком в 5 минут, далее не более одного раза в 30 минут. Аналогичный режим повтора рекомендуется в случае неполучения ответа от Оператора или получения ответа HTTP status 500.
    Ответ написан
  • Какую Cloud PaaS можно использовать для множества проектов с небольшими cron задачами?

    r0zh0k
    @r0zh0k
    Site Reliability Engineer
    Наверное вопрос уже не акутален, но если сами задачи выполняются достаточно быстро, то я бы крайне рекомендовал AWS Lambda. Сейчас они добавили туда крон + возможность прокидывать переменные окружения. Придется немножко повозиться с CI, но в итоге при определенных условиях может получиться бесплатное решение.

    А так, именно скедулеров для джоб толком и нет. Я в итоге начал писать свой маленький, многи тоже так делают, потому что решения типа Mesosphere или других довольно тяжеловесны и сложны в настройке и поддержке.
    Ответ написан
    Комментировать
  • Сервис для коллективного комментирования изображений (макетов сайтов и так далее)

    r0zh0k
    @r0zh0k Автор вопроса
    Site Reliability Engineer
    Еще есть отличный стартап skwibl.com/ который прекрасно решает поставленную задачу.
    Ответ написан
  • Каталог .idea в JetBrains PhpStorm 4?

    r0zh0k
    @r0zh0k
    Site Reliability Engineer
    А чем не устраивает использование .ipr файла для хранения проектных метаданных?
    Ответ написан
    4 комментария