Pull to refresh
-25
0
Send message

Обзор способов и протоколов аутентификации в веб-приложениях

Reading time18 min
Views675K


Я расскажу о применении различных способов аутентификации для веб-приложений, включая аутентификацию по паролю, по сертификатам, по одноразовым паролям, по ключам доступа и по токенам. Коснусь технологии единого входа (Single Sign-On), рассмотрю различные стандарты и протоколы аутентификации.

Перед тем, как перейти к техническим деталям, давайте немного освежим терминологию.

  • Идентификация — это заявление о том, кем вы являетесь. В зависимости от ситуации, это может быть имя, адрес электронной почты, номер учетной записи, итд.
  • Аутентификация — предоставление доказательств, что вы на самом деле есть тот, кем идентифицировались (от слова “authentic” — истинный, подлинный).
  • Авторизация — проверка, что вам разрешен доступ к запрашиваемому ресурсу.


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

Аналогично эти термины применяются в компьютерных системах, где традиционно под идентификацией понимают получение вашей учетной записи (identity) по username или email; под аутентификацией — проверку, что вы знаете пароль от этой учетной записи, а под авторизацией — проверку вашей роли в системе и решение о предоставлении доступа к запрошенной странице или ресурсу.

Однако в современных системах существуют и более сложные схемы аутентификации и авторизации, о которых я расскажу далее. Но начнем с простого и понятного.
Читать дальше →

Микросервисы: опыт использования в нагруженном проекте

Reading time17 min
Views69K


На конференции HighLoad++ 2016 руководитель разработки «М-Тех» Вадим Мадисон рассказал о росте от системы, для которой сотня микросервисов казалась огромным числом, до нагруженного проекта, где пара тысяч микросервисов — обыденность.

Тема моего доклада — то, как мы запускали в продакшн микросервисы на достаточно нагруженном проекте. Это некий агрегированный опыт, но поскольку я работаю в компании «M-Tех», то давайте я пару слов расскажу о том, кто мы.

Если коротко, то мы занимаемся видеоотдачей — отдаём видео в реальном времени. Мы являемся видеоплатформой для «НТВ-Плюс» и «Матч ТВ». Это 300 тысяч одновременных пользователей, которые прибегают за 5 минут. Это 300 терабайт контента, который мы отдаем в час. Это такая интересная задача. Как это всё обслужить?

Про что сама эта история? Это про то, как мы росли, как проект развивался, как происходило какое-то переосмысление каких-то его частей, какого-то взаимодействия. Так или иначе, это про масштабирование проекта, потому что это всё — ради того, чтобы выдержать ещё больше нагрузки, предоставить клиентам ещё больше функционала и при этом не упасть, не потерять ключевых характеристик. В общем, чтобы клиент остался доволен. Ну и немного про то, какой путь мы прошли. С чего мы начинали.
Читать дальше →

Решение японских кроссвордов одним запросом SQL

Reading time4 min
Views60K
Привет хабр! Приближается день программиста, и я спешу поделиться своими ненормальными наработками.

Японский кроссворд — NP-полная задача, как и задача коммивояжёра, укладки рюкзака и др. Когда ее решает человек, следует последовательно определять гарантированно заполненные и пустые ячейки. Одну за другой вычеркивать колонки и строки, пока не сложится весь рисунок. Как же возможно запрограммировать решение подобной задачи на языке, который официально даже не является языком программирования, не содержит циклов и переменных? SQL — язык запросов, его главная задача — выбирать строки. Вот мы и будем генерировать множество всех возможных перестановок и, словно скульптор, отсекать все лишнее.

укусить себя за пятку

Как sql-запросом извлечь из базы данных информацию, которой там нет

Level of difficultyEasy
Reading time3 min
Views37K

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


Приходят пользователи и просят: «Вот мы внесли данные в базу, а скажите нам, чего не хватает? Какие данные мы ещё не внесли в базу и их не хватает для полного счастья?»
Первая (и скажем честно, весьма глупая) реакция: «Как же я вам найду то, чего нет в базе данных?».


Но отбросим эмоции и применим логику. Ведь, как правило, требуются данные, формирование которых подчиняется некоему правилу — номера квитанций, справок и так далее… И я исхожу из того, что все эти номера и идентификаторы могут быть преобразованы в натуральную последовательность.
То есть задача будет сформулирована следующим образом: в базе данных хранится последовательность натуральных чисел, в которой есть пропуски, и необходимо вывести пропущенные числа для пользователя.
В такой формулировке задача уже выглядит достаточно простой. Более того — возникает желание реализовать эту задачу одним единственным sql-запросом.

Читать дальше →

О, эти планы запросов

Reading time2 min
Views77K


История стара как мир. Две таблицы:
  • Cities – 100 уникальных городов.
  • People – 10 млн. людей. У некоторых людей город может быть не указан.

Распределение людей по городам – равномерное.
Индексы на поля Cites.Id, Cites.Name, People .CityId – в наличии.

Нужно выбрать первых 100 записей People, отсортированных по Cites.

Читать дальше →

«Лекарство от болезни»: автоматное программирование

Reading time4 min
Views18K
Новости о различных уязвимостях программного обеспечения появляются регулярно, к этому все привыкли. Однако одно дело — ошибки в мобильном приложении, а другое — возможная остановка ядерного реактора. Сегодня мы поговорим об истоках проблем с программным обеспечением и возможном способе исправления ситуации, в частности — автоматном программировании.

Читать дальше →

Azure понятным языком [Шпаргалка]

Reading time10 min
Views76K
Скажите, приходилось ли вам слышать о новых службах Azure: Elasticville, StorageWart и API Gatesian? Разумеется, нет, ведь эти названия были придуманы только что. В этой статье мы делимся с вами шпаргалкой, в которой понятным языком описана экосистема Microsoft Azure.


Читать дальше →

Quadstor — виртуальный SAN для бюджетников

Reading time6 min
Views18K
Еще примерно год назад я наткнулся на статью «50 инструментов для автоматизации облачной ифраструктуры» в котором описывались инструменты для работы с виртуализацией и в нем промелькнул инструмент под названием Quadstor. И недавно, наконец-то дошли руки до этого замечательного софта, и теперь хочу немного о нем рассказать, что это такое и с чем его едят!
Quadstor — это виртуализация хранилищ которая работает на основе iSCSI. quadstor.com

И так, что он умеет:

  1. Поддержка виртуальных дисков по Fibre Channel, iSCSI или локально.
  2. Тонкие диски (Thin Provisioning)
  3. Дедупликация данных
  4. Высокая доступность (High Availability)
  5. Поддержка VAAI (Hardware Acceleration)
  6. Поддержка кластеров Windows server 2012, Hyper-V, VMware
  7. Поддержка ZFS
  8. И самое основное — он бесплатный (ну а поддержка за деньги).
  9. Размер виртуального диска до 64Тб.
Читать дальше →

IoT в вендинговом бизнесе: интеллектуальный торговый автомат

Reading time21 min
Views17K
Сегодня расскажем о том, как был создан интеллектуальный торговый автомат. Сначала, с использованием Intel IoT Developer Kit и Grove IoT Commercial Developer Kit, мы построили прототип, который, после успешных испытаний, преобразовали в решение, подходящее для практического использования. В частности, в готовом автомате использованы шлюз Intel для интернета вещей, датчики промышленного класса, Intel IoT Gateway Software Suite, Intel System Studio и облачные службы Microsoft Azure. Получившийся в итоге программно-аппаратный комплекс способен отслеживать наличие товара в автомате, вести журнал продаж, напоминать о необходимости обслуживания автомата. Шлюз собирает сведения, поступающие от датчика температуры, от шаговых двигателей, приводящих в движение спирали для выдачи товаров, и от приложения, ответственного за продажу. Данные можно анализировать на шлюзе и передавать в облако для накопления и дальнейшего исследования.


Читать дальше →

COUNT(*)

Reading time7 min
Views124K


У меня есть подборка простеньких вопросов, которые я люблю задавать при собеседовании. Например, как посчитать общее число записей к таблице? Вроде бы ничего сложного, но если копнуть глубже, то можно много интересных нюансов рассказать собеседнику.

Давайте начнем с простого… Эти запросы отличаются чем-то друг от друга с точки зрения конечного результата?

SELECT COUNT(*) FROM Sales.SalesOrderDetail
SELECT COUNT_BIG(*) FROM Sales.SalesOrderDetail
Подробнее

Чек-лист: что такое VDI или как отличить настоящий продукт от «импортозамещенной» поделки

Reading time2 min
Views9.6K


История вопроса


Мы вместе с коллегами из Virtuozzo (так после продажи части бизнеса и бренда Odin компании Ingram Micro называется подразделение Parallels, которое занимается виртуализацией) разработали продукт для виртуализации рабочих мест – Parallels VDI от IBS. Плюс у нас есть богатый опыт реализации проектов по консолидации рабочих мест с использованием решений Citrix и VMware. В общем, мы видели, пожалуй, все, что творится «под капотом» VDI-решений — хорошо знаем, как они должны быть устроены и чем отличаются от простой виртуализации. Поэтому когда мы встречаем решение, в котором заявлена реализация VDI, а по факту выясняется, что разработчик в меру своей принципиальности и честности понимает под этим просто подключение к виртуальной машине с помощью какого-нибудь протокола доставки рабочего стола, нам становится грустно.
Читать дальше →

Страх и ненависть в распределённых системах

Reading time21 min
Views81K


Роман Гребенников объясняет сложность построения распределённых систем. Это — доклад Highload++ 2016.

Всем привет, меня зовут Гребенников Роман. Я работаю в компании Findify. Мы делаем поиск для онлайн-магазинов. Но разговор не об этом. В компании Findify я занимаюсь распределенными системами.

Что же такое распределённые системы?

[ В закладки ] Зоопарк архитектур нейронных сетей. Часть 1

Reading time10 min
Views97K


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

Поэтому я решил составить шпаргалку по таким архитектурам. Большинство из них — нейронные сети, но некоторые — звери иной породы. Хотя все эти архитектуры подаются как новейшие и уникальные, когда я изобразил их структуру, внутренние связи стали намного понятнее.
Читать дальше →

Выбор правильной стратегии обработки ошибок (части 1 и 2)

Reading time14 min
Views29K


Существует две фундаментальные стратегии: обработка исправимых ошибок (исключения, коды возврата по ошибке, функции-обработчики) и неисправимых (assert(), abort()). В каких случаях какую стратегию лучше использовать?
Читать дальше →

Выбор правильной стратегии обработки ошибок (части 3 и 4)

Reading time15 min
Views12K

image


Части 1 и 2: ссылка


В первой части мы поговорили о разных стратегиях обработки ошибок и о том, когда их рекомендуется применять. В частности, я рассказал, что предусловия функций должны проверяться с помощью отладочных утверждений (debug assertions), т. е. только в режиме отладки.


Для проверки условия библиотека С предоставляет макрос assert(), но только если не определён NDEBUG. Однако, как и в случае со многими другими вещами в С, это простое, но иногда неэффективное решение. Главная проблема, с которой я столкнулся, — глобальность решения: у вас есть утверждения либо везде, либо нигде. Плохо это потому, что вы не сможете отключить утверждения в библиотеке, оставив их только в собственном коде. Поэтому многие авторы библиотек самостоятельно пишут макросы утверждений, раз за разом.

Читать дальше →

19 команд ffmpeg для любых нужд

Reading time3 min
Views583K
От переводчика:
Многие знают, что ffmpeg — это сила, но не все знают, какая именно. Он многогранен и безграничен, а его man объёмен и местами малопонятен, лишь немногие постигли дао профессиональной работы с ним. И тем не менее, этот инструмент может быть полезен почти всем, кто хоть иногда работает с видео и звуком, даже на бытовом уровне. О некоторых полезных консольных командах ffmpeg и пойдёт речь в статье. В некоторых местах я взял на себя смелость вставить ссылки на поясняющие статьи.


ffmpeg — это кроссплатформенная open-source библиотека для обработки видео- и аудиофайлов. Я собрал 19 полезных и удивительных команд, покрывающих почти все нужды: конвертация видео, извлечение звуковой дорожки, конвертирование для iPod или PSP, и многое другое.

1. Получение информации о видеофайле

ffmpeg -i video.avi

2. Превратить набор картинок в видео

ffmpeg -f image2 -i image%d.jpg video.mpg

Эта команда преобразует все картинки из текущей директории (названные image1.jpg, image2.jpg и т.д.) в видеофайл video.mpg

(примечание переводчика: мне больше нравится такой формат:
ffmpeg -r 12 -y -i "image_%010d.png" output.mpg

здесь задаётся frame rate (12) для видео, формат «image_%010d.png» означает, что картинки будут искаться в виде image_0000000001.png, image_0000000002.png и тд, то есть, в формате printf)
Читать дальше →

Mikrotik: VLAN с использованием чипа коммутации

Reading time5 min
Views93K
Оборудование Mikrotik богато возможностями, но к сожалению, разработчики не всегда успевают держать Wiki с документацией в актуальном состоянии, иногда информация относится к уже устаревшей версии RouterOS или в ней не раскрыты маленькие тонкости. Сегодня я хочу немного дополнить официальную Wiki, рассказав о настройке встроенного чипа коммутации, для работы с VLAN. В качестве подопытных у нас: RB951Ui-2HnD и CRS125-24G-1S-2HnD. Все проделано на RouterOS 6.37.1
Читать дальше →

Mikrotik: маленькая хитрость switch chip

Reading time2 min
Views79K
Моя прошлая статья про switch chip на Mikrotik вызвала неоднозначную реакцию, а комментарий одного из читателей натолкнул на идею. И так: как на RB952Ui-5ac2nD сделать более одной группы коммутации?
Читать дальше →

Настройка VLAN на операционной системе routerOS

Reading time5 min
Views152K
Для наглядного примера я буду использовать маршрутизатор Mikrotik CCR1036-8G-2S+ и коммутатор CRS125-24G-1S.

Этот вариант на данный момент работает в нескольких гостиницах Москвы и Московской области.
Поставим условную задачу, чтобы на каждом коммутационном узле присутствовала сеть класса А (10.1.0.0/24) для работников фирмы и сеть класса С (192.168.1.0/24) для WiFi для посетителей.

Допустим, у нас имеется коммутационный узел A c маршрутизатором Mikrotik CCR1036-8G-2S+, коммутационный узел B с коммутатором CRS125-24G-1S. Коммутационные узлы А и В будут соединены каналом связи (Trunk) в нашем случае по витой паре (каналов связи (trunk) может быть несколько в зависимости от количества коммутационных узлов; также если имеется ВОЛС и оптический модуль SFP mikrotik, то можно trunk назначить и на SFP). Приведу ниже схему с использованием trunk по витой паре.

image

Приступим к настройке коммутационного узла A с маршрутизатором Mikrotik CCR1036-8G-2S+.
Читать дальше →

Генерирование полигональных карт для игр

Reading time24 min
Views61K
Я хотел научиться генерировать интересные игровые карты, которые не обязательно были бы реалистичными, а также попробовать техники, с которыми раньше не работал. Обычно я создаю карты с другой структурой. Что можно сделать с тысячей полигонов вместо миллиона тайлов? Отчётливо различимые игроком области могут быть полезны для геймплея: местоположения городов, места квестов, территории для захвата или колонизации, ориентиры, точки поиска пути, зоны с разной сложностью и т.д. Я генерировал карты с помощью полигонов, а затем растеризировал их вот в такие карты:

image

Во многих процедурных генераторах карт, в том числе и некоторых моих предыдущих проектах, для генерирования карты высот используются функции шума (midpoint displacement, фракталы, diamond-square, шум Перлина и т.д.). Здесь я их не применял. Вместо неё я использовал структуру графов для моделирования элементов, определяемых ограничениями геймплея (высота, дороги, течение рек, места квестов, типы монстров) и функции шума для моделирования того, что не ограничивается геймплеем (форма побережья, расположение рек и деревьев).
Читать дальше →

Information

Rating
Does not participate
Location
Таджикистан
Registered
Activity